一.抽象类概念
抽象属性:只有属性名,没有具体的值。
二.定义抽象类
- 抽象类:
- ①. 有关键字 abstract
- ②. 有抽象成员。只有属性名,没有具体的值,没有等号。
- ③. 不能被 new
- ④. 作用:给其他的子类立一个标准!
package level02
object Class17 {
// 抽象类
abstract class DreamJob {
var money: Double // 只有属性名,没有具体的值。
var vacation: Int
var boss: String
}
// 子类:具体类
class PE extends DreamJob {
var money: Double = 16500
var vacation: Int = 4
var boss: String = "无人"
}
def main(args: Array[String]): Unit = {
// new DreamJob()
val pe1 = new PE()
println(pe1.money)
}
}
三.继承抽象类(子类继承了抽象类,它就必须去实现所有抽象属性和抽象方法)
1.有关键字abstract 2.有①.抽象成员,只有属性名,没有具体值,没有等号②.具体成员 3.子类要实现所有的抽象成员
package level02
object Class18 {
// 抽象类
abstract class DreamJob {
// 抽象属性:只有属性名,没有具体的值
var money: Double
var vocation: Int
var boss: String
// 具体属性
var name: String = "理想工作"
// 抽象方法:没有方法体,就是一个抽象的方法,它需要在子类中实现
def addMoney(): Unit
// 具体方法
def getMoney(): Unit = {
println(s"发工资:${money}元")
}
}
// 子类:具体类
class PE extends DreamJob {
// 实现抽象属性
var money: Double = 5000.0
var vocation: Int = 6
var boss: String = "无人"
// 实现抽象方法
def addMoney(): Unit = {
money *= 1.1
}
}
// 主程序入口
def main(args: Array[String]): Unit = {
// val dj = new DreamJob() // 错误,抽象类不能直接实例化
val pe1 = new PE() // 实例化子类
pe1.addMoney()
pe1.getMoney()
}
}
四.抽象类重写
- 1.如果子类中对抽象类中的方法定义不满意,仍可以使用override去覆盖的
- 2.注意:
- (1)抽象类中的方法可以有抽象的和非抽象的,同样属性也可以有抽象的和非抽象的。
- (2)抽象方法可以实现,而非抽象方法可以继承或重写。
- (2)属性中对于抽象成员是必须要实现的,而非抽象成员可以继承或重写。
package level02
object Class18 {
// 抽象类
abstract class DreamJob {
// 抽象属性:只有属性名,没有具体的值
var money: Double
var vocation: Int
var boss: String
// 具体属性
var name: String = "理想工作"
// 抽象方法:没有方法体,就是一个抽象的方法,它需要在子类中实现
def addMoney(): Unit
// 具体方法
def getMoney(): Unit = {
println(s"发工资:${money}元")
}
}
// 子类:具体类
class PE extends DreamJob {
// 实现抽象属性
var money: Double = 5000.0
var vocation: Int = 6
var boss: String = "无人"
// 实现抽象方法
def addMoney(): Unit = {
money *= 1.1
}
override def getMoney():Unit={
println(s"上银行卡:${money}元")
}
}
// 主程序入口
def main(args: Array[String]): Unit = {
// val dj = new DreamJob() // 错误,抽象类不能直接实例化
val pe1 = new PE() // 实例化子类
pe1.addMoney()
pe1.getMoney()
}
}