34_面向对象_多态

多态
* 概念
* 一种数据类型,具有多种形态,在运行时判定它属于哪一种数据类型(动态绑定)
* 语法
* 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)
    }
  }

}
复制代码

 








posted @   学而不思则罔!  阅读(34)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
点击右上角即可分享
微信分享提示