抽象类

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 }

 

posted @ 2022-05-09 15:58  小王同学学编程  阅读(218)  评论(0)    收藏  举报
levels of contents