(一) 理解抽象类
类本身就是对对象的抽象,抽象类就是对类的抽象,就是一种更加模糊的类。
定义:抽象类是一个包含一个或多个抽象方法的类。抽象方法是不带任何实现的方法。抽象类也可以包含具体的方法和属性。
代码演示:
object practice45 {
/*
* 抽象类 abstract
* 1. 一个抽象类(加了abstract修饰的),不能被new。
* 一个类不能直接用来创建对象,那么这个类具体有什么用呢?做别人的父亲!
**/
abstract class AICar {
def autoDriver(): Unit = {
println("具体方法,自动驾驶......")
}
}
class SU7 extends AICar{
}
def main(args: Array[String]): Unit = {
val su = new SU7()
su.autoDriver()
}
}
结果为:具体方法,自动驾驶......
( 二 ) 定义抽象类
代码演示(定义一个智能汽车类):
object practice45 {
/*
* 抽象类 abstract
* 1. 一个抽象类(加了abstract修饰的),不能被new。
* 一个类不能直接用来创建对象,那么这个类具体有什么用呢?做别人的父亲!
* 2.可以定义的抽象方法,在子类中去实现
*/
abstract class AICar {
// 抽象方法:没有具体的函数代码
def autoEn():Unit
def autoDriver(): Unit = {
println("具体方法,自动驾驶......")
}
}
class SU7 extends AICar{
override def autoEn(): Unit = {
println(s"采用小米独家的无线充电技术,停车就可以充电")
}
}
def main(args: Array[String]): Unit = {
val su = new SU7()
su.autoEn()
}
}
结果为:采用小米独家的无线充电技术,停车就可以充电
(三) 继承抽象类
子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法
代码演示:
object practice46 {
/*
* 抽象类 abstract
* 1. 一个抽象类(加了abstract修饰的),不能被new。
* 一个类不能直接用来创建对象,那么这个类具体有什么用呢?做别人的父亲!
* 2.可以定义的抽象方法,在子类中去实现
*
* 3.一个抽象类中可以有:
* 1.具体属性 val name:String = "小明"
* 2.具体方法
*
* 3.抽象属性 没有具体值的属性,只有属性名和类型
* 4.抽象方法
*
*/
abstract class AICar() {
val name:String
def autoRun():Unit
}
class xiaoMi extends AICar {
val name:String = "xiaoMi"
def autoRun():Unit = {
println("小米汽车,自动驾驶......")
}
}
def main(args: Array[String]): Unit = {
var car1 = new xiaoMi()
car1.autoRun()
}
}
父类AICar中既有抽象属性name,又有抽象方法autoRun(),这些在子类中都要去实现