14.Scala抽象类

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


}
发布了118 篇原创文章 · 获赞 5 · 访问量 7175

猜你喜欢

转载自blog.csdn.net/resilienter/article/details/103745592