object Base70 {
// 抽象类
abstract class DreamJob() {
var money: Double // 只有属性名,没有具体的值
var vacation: Int
var boss: String
}
+
+++++++++++++++++++++++++++
// 子类:具体类
class PE extends DreamJob {
var money: Double = 14500
var vacation: Int = 4
var boss: String = "无人"
}
def main(args: Array[String]): Unit = {
// new DreamJob() // 报错,抽象类不能实例化
val pe1 = new PE()
println(pe1.money) // 输出:14500.0
}
}
输出结果
object Base71 {
// 抽象类
abstract class DreamJob() {
// 抽象属性(仅声明,无初始化)
var money: Double
var vacation: Int
var boss: String
// 具体属性(有初始化值)
var name: String = "理想工作"
// 抽象方法(仅声明,无实现)
def addMoney(): Unit
// 具体方法(有实现)
def getMoney(): Unit = {
println(s"发工资:${money}元")
}
}
// 子类:具体类(实现抽象类的抽象成员)
class PE extends DreamJob {
// 实现抽象属性
var money: Double = 14500
var vacation: Int = 4
var boss: String = "无人"
// 实现抽象方法
def addMoney(): Unit = {
money *= 1.1 // 工资增加10%
}
}
def main(args: Array[String]): Unit = {
// new DreamJob() // 报错:抽象类不能直接实例化
val pe1 = new PE()
pe1.addMoney() // 调用子类实现的抽象方法
pe1.getMoney() // 调用父类的具体方法,输出:发工资:15950.0元
}
}
输出结果
-
抽象类
DreamJob包含:- 抽象属性(
money、vacation、boss):仅声明类型,无初始化值,需子类实现 - 具体属性(
name):有默认初始化值 - 抽象方法(
addMoney):仅声明方法签名,无实现,需子类实现 - 具体方法(
getMoney):有完整实现,可直接被子类继承使用
- 抽象属性(
-
子类
PE:- 继承抽象类
DreamJob并实现了所有抽象属性和抽象方法 addMoney方法实现为工资增加 10%
- 继承抽象类
-
main方法:- 抽象类不能直接实例化(注释掉的
new DreamJob()会报错) - 通过子类
PE实例化对象,调用方法后输出增长后的工资(14500 × 1.1 = 15950.0)
- 抽象类不能直接实例化(注释掉的