33_面向对象_继承

继承
* 语法
* class 子类名称(参数列表) extends 父类名称(参数列表) {}
* 说明
* 父类名称(参数列表) 决定着 父类使用哪种构造器对父类进行初始化
* 说明
* 1. 子类继承父类的 属性 和 方法 (子类及子类对象中不用声明,可以直接用)
* 2. scala是单继承
* 3. 子类创建对象时,父类及上基类都会被初始化
* 父类 主构造器带参数,那么子类也必须带参数
* 示例 ZiClass初始化 上游 FuClass 、YeClass 都会被初始化

重写
*       java中只能重新方法
* scala可以重新方法和属性
* 说明
* 1. 父类的var属性无法被重写(抽象类的抽象属性除外) (父类属性为公共属性,没有必须要重写,可以直接使用)
* 父类的val属性可以被重写
* */
复制代码
package com.dawang.scala.面向对象

/**
  * @author gaocun
  * @create 2021-10-23 10:01 AM */
object 继承_07 {
  /*
  *   继承
  *       语法
  *          class 子类名称(参数列表) extends 父类名称(参数列表) {}
  *       说明
  *          父类名称(参数列表) 决定着 父类使用哪种构造器对父类进行初始化
  *       说明
  *           1. 子类继承父类的 属性 和 方法 (子类及子类对象中不用声明,可以直接用)
  *           2. scala是单继承
  *           3. 子类创建对象时,父类及上基类都会被初始化
  *                 父类 主构造器带参数,那么子类也必须带参数
  *                 示例 ZiClass初始化 上游 FuClass 、YeClass 都会被初始化
  *   重写
  *       java中只能重新方法
  *       scala可以重新方法和属性
  *           说明
  *              1. 父类的var属性无法被重写(抽象类的抽象属性除外)  (父类属性为公共属性,没有必须要重写,可以直接使用)
  *                 父类的val属性可以被重写
  * */
}


package Outer {

  class YeClass() {
    var name: String = "YeClass"
    println("YeClass - 主构造器调用")

    def show = println("YeClass - show方法")
  }

  class FuClass(var id: Int) extends YeClass {

    name = "FuClass"
    var age = 10
    val sex = 1

    // 辅助构造器
    def this(id: Int, name: String) = {
      this(10) // 调用主助构造器
      this.id = id
      this.name = name
      println("FuClass - 辅助构造器 调用")
    }

    override def show = println("FuClass 的show方法")

    println("FuClass - 主构造器调用")
  }

  class ZiClass(id: Int, name1:String) extends FuClass(id,name1) {
    name = "ZiClass"
    // 重写父类属性
    age = 100
    override val sex = 0

    println("ZiClass - 主构造器调用")
  }

  // 测试对象
  object test {
    def main(args: Array[String]): Unit = {
      val obj = new ZiClass(10,"大王")
      println(obj.id)
      println(obj.name)
      obj.show
    }
  }


}
复制代码

Java-继承

复制代码
import java.sql.SQLOutput;

/**
 * @author gaocun
 * @create 2021-10-23 9:05 AM
 */
public class Persion {
    int id;
    String name;

    Persion(int id, String name) {
        System.out.println("Persion - 含参构造");
    }
}

class Zi extends Persion {
    int id;
    String name;

    Zi(int id, String name) {
        super(id, name);
    }
}

/*
*  当父类只有无参数构造,子类可以使用默认的构造器(默认调super())
*  当父类只有带参数构造,子类必须使用带参构造,并手动调用super(属性)
* */

class Test {
    public static void main(String[] args) {
        System.out.println("aaa");
        new Persion(10, "大王");
        //new Persion();
    }
}
复制代码

 

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