8.4.6 抽象类
Scala 的抽象类的概念和 Java 的抽象类的概念是一样的, 都是表示的不能实例化的类.
Scala 的抽象类也是使用的关键字abstract
抽象类能有哪些成员:
普通类有的抽象类都可以有.
抽象字段
没有初始化值的字段
var a
抽象方法
没有方法实现
def foo(name:String): Int
下面就是一个抽象类:
abstract class Animal {
var name = "大黄" // 普通字段
var age: Int // 抽象字段
def say(): Unit ={ // 普通方法
}
def cry() // 抽象方法
}
说明:
abstract
关键字只用作class
前,抽象字段和抽象方法前不能添加 abstract 关键字. 抽象类的价值更多是在于设计,是设计者设计好后,让子类继承并实现抽象类(即:实现抽象类的抽象方法)
抽象类不能被实例化
抽象类不一定要包含
abstract
方法。也就是说,抽象类可以没有abstract
方法一旦类包含了抽象方法或者抽象属性,则这个类必须声明为
abstract
抽象方法不能有主体,不允许使用
abstract
修饰。如果一个类继承了抽象类,则它必须实现抽象类的所有抽象方法和抽象属性,除非它自己也声明为
abstract
类抽象方法和抽象属性不能使用
private
、final
来修饰,因为这些关键字都是和重写/实现相违背的。子类重写抽象方法不需要
override
,写上也不会错。