理解抽象类
abstract:抽象
- 抽象属性:只有属性名,没有具体的值。
- 抽象类:
- 1.有关键字 abstract
- 2.有抽象成员。只有属性名,没有具体的值。
- 3.不能被new
- 4.作用:给其他子类立一个标准
类本身就是对对象的抽象,抽象类就是对类的抽象,就是一种更加模糊的类。
定义:抽象类是一个包含一个或多个抽象方法的类。抽象方法是不带任何实现的方法。抽象类也可以包含具体的方法和属性。
目的:抽象类的主要目的是为子类提供公共的接口和部分实现,并确保子类实现抽象方法。
定义抽象类
object Class06 {
abstract class DreamJob() {
var money:Double //只有属性名,没有具体的值。
var vacation:Int
var boss:String
}
class PE extends DreamJob{
var money:Double=14500
var vacation: Int = 4
var boss:String="无人"
}
def main(args: Array[String]): Unit = {
// new DreamJob()
val pe1 = new PE
println(pe1.money)
}
}
结果:
继承抽象类
子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法
/*
*abstract:抽象
*
* 抽象属性:只有属性名,没有具体的值。
*
* 抽象类:
* 1.有关键字 abstract
* 2.有
* 1.抽象成员。只有属性名,没有具体的值 没有 等号。
* 2.具体成员。
* 3.子类要实现所有的抽象成员!
* 如果要重写父类具体成员,使用override
*/
object Class07 {
//抽象类
abstract class DreamJob() {
//抽象属性
var money:Double //只有属性名,没有具体的值。
var vacation:Int
var boss:String
//具体属性
var name:String="理想工作"
//抽象方法。没有等号,就是一个抽象的方法。它需要在子类中去实现
def addMoney():Unit
//具体方法
def getMoney():Unit={
println(s"发工资:${money}")
}
}
//子类:具体类
class PE extends DreamJob{
var money:Double=14500
var vacation: Int = 4
var boss:String="无人"
def addMoney():Unit={
money*=1.1
}
override def getMoney(): Unit = {
println(s"上银行卡:${money}元")
}
}
def main(args: Array[String]): Unit = {
// new DreamJob()
val pe1 = new PE()
pe1.addMoney()
pe1.getMoney()
}
}
结果:
抽象类重写
如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的。
/*
*abstract:抽象
*
* 抽象属性:只有属性名,没有具体的值。
*
* 抽象类:
* 1.有关键字 abstract
* 2.有
* 1.抽象成员。只有属性名,没有具体的值 没有 等号。
* 2.具体成员。
* 3.子类要实现所有的抽象成员!
* 如果要重写父类具体成员,使用override
*/
object Class07 {
//抽象类
abstract class DreamJob() {
//抽象属性
var money:Double //只有属性名,没有具体的值。
var vacation:Int
var boss:String
//具体属性
var name:String="理想工作"
//抽象方法。没有等号,就是一个抽象的方法。它需要在子类中去实现
def addMoney():Unit
//具体方法
def getMoney():Unit={
println(s"发工资:${money}")
}
}
//子类:具体类
class PE extends DreamJob{
var money:Double=14500
var vacation: Int = 4
var boss:String="无人"
def addMoney():Unit={
money*=1.1
}
override def getMoney(): Unit = {
println(s"上银行卡:${money}元")
}
}
def main(args: Array[String]): Unit = {
// new DreamJob()
val pe1 = new PE()
pe1.addMoney()
pe1.getMoney()
}
}
内部类
/*
*内部类:在类的内部,写另一个类
*/
object Class08 {
class C1 {
class B1 {
def say():Unit={
println("B1......")
}
}
}
def main(args: Array[String]): Unit = {
// 创建一个c1的对象
val c1=new C1()
//2.创建一个B1的对象
val b1=new c1.B1()
b1.say()
}
}