多态
* 概念
* 一种数据类型,具有多种形态,在运行时判定它属于哪一种数据类型(动态绑定)
* 语法
* FuClass obj = new ZiClass()
* 用父类(超类)接收子类对象,调用时会优先调用子类的实现(属性&方法)
* 当子类没有重写时,则调用父类的实现
* 无法调用子类的特有实现(子类有而父类没有)
* 动态绑定
* java只有方法的动态绑定,scala中属性和方法都是动态绑定
* 示例
* java FuClass obj = new ZiClass()
* obj.id & obj.name 为父类的id和name
* obj.方法 为子类的方法
* scala FuClass obj = new ZiClass()
* obj.id & obj.name 为子类的id和name
* obj.方法 为子类的方法
* 重写
* java中只能重写方法
* scala可以重写方法和属性
*
* */
/**
* @author gaocun
* @create 2021-10-23 11:21 PM */
object 多态_08 {
/*
* 多态
* 概念
* 一种数据类型,具有多种形态,在运行时判定它属于哪一种数据类型(动态绑定)
* 语法
* FuClass obj = new ZiClass()
* 用父类(超类)接收子类对象,调用时会优先调用子类的实现(属性&方法)
* 当子类没有重写时,则调用父类的实现
* 无法调用子类的特有实现(子类有而父类没有)
* 动态绑定
* java只有方法的动态绑定,scala中属性和方法都是动态绑定
* 示例
* java FuClass obj = new ZiClass()
* obj.id & obj.name 为父类的id和name
* obj.方法 为子类的方法
* scala FuClass obj = new ZiClass()
* obj.id & obj.name 为子类的id和name
* obj.方法 为子类的方法
* 重写
* java中只能重新方法
* scala可以重新方法和属性
*
* */
}
package Outer {
class FuClass() {
var id = 99
var name = "FuClass"
// 辅助构造器
def this(id: Int, name: String) = {
this() // 调用主助构造器
this.id = id
this.name = name
println("FuClass - 辅助构造器 调用")
}
def show = println("FuClass 的show方法")
println("FuClass - 主构造器调用")
}
class ZiClass() extends FuClass {
//重写属性
override var id: Int = 88
name = "ZiClass"
def fun = println("ZiClass - 特有方法")
//重写方法
override def show: Unit = println("ZiClass - 重写show方法")
println("ZiClass - 主构造器调用")
}
// 测试对象
object testpoly {
def main(args: Array[String]): Unit = {
val obj: FuClass = new ZiClass()
println(obj.id)
println(obj.name)
}
}
}