抽象类
1、定义抽象类:abstract class 类名 {} //通过abstract关键字标记抽象类
2、定义抽象属性:一个属性没有初始化,就是抽象类
3、定义抽象方法:def 方法名() :数据类型 //只声明而没有实现的方法,就是抽象方法
4、继承、重写:
(1)如果父类为抽象类,那么子类需要将抽象的属性和方法实现,否则子类也需声明为抽象类。
(2)重写非抽象方法需要用override修饰,重写抽象方法则可以不加override。
(3)子类中调用父类的方法使用super关键字。
(4)子类对抽象属性进行实现,父类抽象属性可以用var修饰。
子类对非抽象属性重写,父类抽象属性只支持val类型,而不支持val。
因为var修饰的为可变变量,子类继承之后就可以直接使用,没有必要重写。
例子:
1 object Test5_AbstractClass { 2 def main(args: Array[String]): Unit = { 3 val student = new student5() 4 student.eat() 5 student.sleep() 6 } 7 8 } 9 //定义抽象类 10 abstract class Person5 { 11 //非抽象属性 12 val name: String = "wl" 13 //抽象属性 14 var age: Int 15 //非抽象方法 16 def eat(): Unit = { 17 println("person eat") 18 } 19 //抽象方法 20 def sleep(): Unit 21 22 } 23 24 //定义具体的实现子类 25 class student5 extends Person5 { 26 //抽象属性 27 var age: Int = 22 28 //抽象方法 29 def sleep(): Unit = { 30 println("student sleep") 31 } 32 33 //重写非抽象属性和方法 34 override val name: String = "student" 35 36 override def eat(): Unit = { 37 super.eat() 38 println("student eat") 39 } 40 41 }

5、匿名子类都是通过抽象类和接口使用。
1 object Test6_AnnoymousClass { 2 def main(args: Array[String]): Unit = { 3 val person6: Person6 = new Person6 { 4 //必须要把抽象属性和方法实现出来,相当于创建了一个匿名子类 5 override var name: String = "wl" 6 override def eat(): Unit = println("person eat") 7 } 8 println(person6.name) 9 person6.eat() 10 } 11 12 } 13 //定义抽象类 14 abstract class Person6 { 15 var name: String 16 def eat(): Unit 17 }


浙公网安备 33010602011771号