繼承
- 繼承的本質是堆某一批類的抽象,從而實現對現實世界更好的建模
- 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
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注意點:
- super呼叫父類的構造方法,必須在構造方法的第一個
- super必須只能出現在子類的方法或構造方法中
- super和this不能同時呼叫構造方法(因為都必須在第一行)
Vs this:
- 代表的物件不同:
this:本身呼叫者這個物件
super:代表父類物件的應用
- 前提
this:沒有繼承也可以使用
super:只能在繼承條件才可以使用
- 構造方法
this():本類的構造
super():父類的構造