抽象类2

28 阅读1分钟

抽象类重写

// 3.一个抽象类中可以有:

具体属性 val name:String = "小米"

具体方法 def autoRun ():Unit = {}

抽象属性:val name:String 没有具体值的属性。只有属性名和类型。它必须写在抽象类中

抽象方法:def autoRun ():Unit

在子类中,要有具体的实现。

// 抽象类 abstract
// 1. 一个抽象类(加了abstract修饰的),不能被new。
//   一个类不能被用来创建对象,那么这个类具体有什么用呢? 就是人的父类!
// 2. 可以定义抽象方法,在子类中去实习

// 3.一个抽象类中可以有:
//具体属性 val name:String = "小米"
//具体方法 def autoRun ():Unit = {}
//抽象属性:val name:String 没有具体值的属性。只有属性名和类型。它必须写在抽象类中
//抽象方法:def autoRun ():Unit
//在子类中,要有具体的实现。
object class009 {
  abstract class AICar() {
    // 1. 具体属性
    var name: String = "car"
    val color: String = "black"
    // 2. 具体方法
    def run(): Unit ={
      println("AICar run......")
    }
    // 3. 抽象属性,没有属性值
    var price: Double
    // 4. 抽象方法,没有方法体
    def autoRun(): Unit
  }


  class XiaoMi extends AICar{
    // 重写
    // 1. 具体属性
    name = "小米" // 对于var的属性,直接覆盖
    override val color = "流光紫" // 对于val的属性,要添加override
    // 2. 具体方法
    override def run(): Unit = {
      println("小米 run.....")
    }
    // 实现
    // 3. 实现 抽象属性
    var price = 28.8
    // 4. 实现 抽象方法
    def autoRun():Unit = { println("小米自动驾驶 *") }
  }

  def main(args: Array[String]): Unit = {
    var c1 = new XiaoMi()
    c1.autoRun()
    c1.run()
    println(c1.name)
    println(c1.color)
  }
}