理解抽象类
抽象类的关键字:abstract
类本身就是对对象的抽象,抽象类就是对类的抽象,就是一种更加模糊的类
定义:抽象类是一个包含一个或多个抽象方法的类。抽象方法是不带任何实现的方法。抽象类也可以包含具体的方法和属性。
目的/作用:抽象类的主要目的是为子类提供公共的接口和部分实现,并确保子类实现抽象方法。
定义抽象类
定义一个Scala的抽象类:abstract class A{}
定义一个智能汽车类
abstract class AICar(){
def autoRun():Unit
var name:String
}
定义抽象属性:var|val 属性名:类型 一个属性没有初始化,没有值
定义抽象方法:def 方法名():String 只声明没有实现方法。
abstract class AICar {
def autoDrive () :Unit = {
println("具体方法,自动驾驶.....")
}
}
class SU7 extends AICar {
}
def main(args: Array[String]): Unit = {
// val car1 = new AICar ()
val su = new SU7()
su.autoDrive()
}
继承抽象类
子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法
-
一个抽象类(加了abstract修饰的),不能被new 一个类不能直接用来创建对象,那么这个类具体有什么用呢?做别人的父类
-
可以定义抽象的方法,在子类中实现
object class11 {
abstract class AICar {
// 抽象方法:没有具体的函数代码
def autoEn():Unit
// 具体方法
def autoDrive () :Unit = {
println("具体方法,自动驾驶...")
}
}
// 在子类中,一定要去实现父类的所有抽象方法
class SU7 extends AICar {
// 使用override 去实现这个方法
override def autoEn(): Unit = {
println(s"采用小米独家无线充电技术,停车就可以充电")
}
}
def main(args:Array[String]): Unit = {
// val car1 = new AICar ()
val su = new SU7()
su.autoDrive()
}
}
代码说明:
抽象类重写
如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的
一个抽象类中可以有:
(1)具体属性 val name:String = "小米"
(2)具体方法
(3)抽象属性:val name:String 没有具体值的属性。只有属性名和类型。它必须写在抽象类中
(4)抽象方法;def autoRRun():Unit
object class13 {
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
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)
}
}