Java继承特性(学习推荐版)——java三大特性之一,子类extends父类

定义

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第1张图片

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第2张图片

Java支持单继承和多层继承,但不支持多继承

# 子类构造器及super用法

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第3张图片

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第4张图片

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第5张图片

解释:子类构造器,注意是子类的构造器,不是子类的方法的第一行默认都会有super()去调用无参构造器,只不过可以省略没写而已。当然也可以自己写super(参数)必须放第一行,去调用有参数构造器。


*见下图,若父类没有无参构造器,则子类构造器(不是子类方法)必须自己写super(参数列表)去调用父类构造器,而且必须放一行

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第6张图片

总结:子类构造器第一行必须写super(参数列表),若没有参数列表,则super可以省略。


应用场景如下

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第7张图片


补充知识:任意类的构造器中,可以通过this(参数列表)去调用该类的其他构造器的

image-20231203140541285

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第8张图片

若子类构造器写了this(参数类别)必须,那么this(参数列表)放构造器的第一行

this()和super()只能存在一个,而且必须放第一行

分析以下代码:

 package Pack2;
 ​
 public class Test {
     public static void main(String[] args) {
         Student zhangsan = new Student("zhangsan");
         System.out.println(zhangsan.getName());
         System.out.println(zhangsan.getAge());
     }
     public void fun() {
         System.out.println("fun");
     }
 }
 class Student extends People{
     private String name;
     private int age;
 ​
     public String getName() {
         return name;
     }
 ​
     public void setName(String name) {
         this.name = name;
     }
 ​
     public int getAge() {
         return age;
     }
 ​
     public void setAge(int age) {
         this.age = age;
     }
     public Student() {
         super();
         System.out.println("无参");
         this.age = 1;
     }
 ​
     public Student(String name) {
         this();  //这里写了this()那么默认的super()就没有了
         //也就是this()和super()只能存在一个
         this.name = name;
     }
 }
 class People {
     People() {
         System.out.println("父类构造器");
     }
 }

下图为执行流程

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第9张图片

运行结果如下:

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第10张图片

分析如下:

因为public String(String name)中存在this了 那么不会去调super()了,去到this()指向的构造器,若该构造器没有this去指向另一个构造器了,那么super()就执行了,也就是说super(参数列表)最多执行一次


继承好处

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第11张图片

示例代码

1.

Java继承特性(学习推荐版)——java三大特性之一,子类extends父类_第12张图片

注释部分代表报错的代码

你可能感兴趣的:(Java学习从0到1,java,开发语言,学习,笔记)