Scala抽象类
Scala中有抽象类,抽象类里面有抽象属性和抽象方法
声明Scala抽象类
声明抽象类使用abstract关键字,在抽象类中,可以声明抽象方法和普通方法
// 声明抽象类:声明类时在class前使用关键字abstract
// 声明抽象方法
abstract class Parent13(){
// 声明普通方法
def test()={
}
// 只要方法声明不完整,那么就是抽象的,所以不需要使用abstract关键字了
def test1():Unit
}
抽象方法
只要方法声明不完整,那么就是抽象的,所以不需要使用abstract关键字了
object Scala_11Object6 {
def main(args: Array[String]): Unit = {
}
}
// 声明抽象类:声明类时在class前使用关键字abstract
// 声明抽象方法
abstract class Parent13(){
// 声明普通方法
def test()={
}
// 只要方法声明不完整,那么就是抽象的,所以不需要使用abstract关键字了
def test1():Unit
}
//子类如果继承抽象类,那么必须重写抽象方法或声明为抽象类
// Scala中重写分为两种情况,
// >>抽象方法的重写:只要将方法补充完整就可以,不用增加任何的修饰符
// >>>完整方法的重写:为了明确方法是用于重写,所以需要增加修饰符
class User13 () extends Parent13 {
override def test(): Unit = {
}
// 将抽象方法补充完整
override def test1(): Unit = {
}
}
抽象属性
只有声明没有初始化的属性都是抽象属性,通过反编译工具可以看到,本质是没有age这个属性,但是又抽象的set和get方法,
class Scala_12Abstract {
def main(args: Array[String]): Unit = {
}
}
abstract class Parent12{
// 完整属性
var name : String = _
// 抽象属性:具有声明,没有初始化
// 本质没有age这个属性,但是有抽象的set和get方法,但是都是抽象的
val age :Int
// var age : Int
}
class User12( ) extends Parent12{
// 如果将父类完整的内容进行重写,必须使用override关键字
//override var name :String= ""
// 将抽象属性补充完整
// 和继承父类没有任何区别
// 可变的变量不能被重写?(假设可以被重写,会由于set,get的动态绑定导致有歧义。)
override val age: Int = 20
}