18-oop繼承

呆头尖瓜發表於2024-06-24

繼承

  • 繼承的本質是堆某一批類的抽象,從而實現對現實世界更好的建模
  • extands:擴充套件。子類是父類的擴充套件
  • Java中類只有單繼承,沒有多繼承,一個兒子只有一個爸爸,一個爸爸可以有多個兒子
  • 繼承是類間關係,還有依賴、組合、聚合等
  • 被final修飾的類不能繼承
  • Ctrl+H -->檢視繼承樹
//在Java中,所有類都預設繼承Object類
//人類 :父類
public class Person {

    //public
    public void say(){
        System.out.println("說了一句話");
    }
    //private
    private int money = 10_0000_0000;
    //透過get/set方法操作私有屬性
    public int getMoney() {
        return money;
    }
    public void setMoney(int money) {
        this.money = money;
    }
}
//學生 is 人
//子類繼承了父類所有public的東西,private的東西無法繼承
public class Student extends Person {
    //Ctrl + H  -->繼承樹
}
/*
    public static void main(String[] args) {
        Student student = new Student();
        student.say();//繼承了父類
    }
 */

super與this

  • super代表父
  • this代表當前的
public class Person {
    public Person() {
        System.out.println("Person無參構造執行");
    }
    protected String name = "狂神";
    public void print(){
        System.out.println("Person");
    }
}
public class Student extends Person {
    public Student() {
        //隱藏程式碼:呼叫了父類的無參構造    現有父後有子
        //super()[這個程式碼被隱藏了] 呼叫父類構造器,必須在子類構造器第一行,不用寫預設存在
        System.out.println("Student無參構造執行");
    }
    private String name = "qinjiang";
    public void print(){
        System.out.println("Student");
    }
    public void test(String name){
        System.out.println(name);//秦疆,輸出的傳遞的引數
        System.out.println(this.name);//qinjiang,當前物件的name
        System.out.println(super.name);//狂神,父類的name
    }
    public void test1(){
        print();//Student
        this.print();//Student
        super.print();//Person
    }
}
/*
    public static void main(String[] args) {
        Student student = new Student();
        //Person無參構造執行
        //Student無參構造執行
        //注:先預設呼叫父類的無參構造,再呼叫子類的
    }
 */

super注意點:

  1. super呼叫父類的構造方法,必須在構造方法的第一個
  2. super必須只能出現在子類的方法或構造方法中
  3. super和this不能同時呼叫構造方法(因為都必須在第一行)

Vs this:

  • 代表的物件不同:
    this:本身呼叫者這個物件
    super:代表父類物件的應用
  • 前提
    this:沒有繼承也可以使用
    super:只能在繼承條件才可以使用
  • 構造方法
    this():本類的構造
    super():父類的構造

相關文章