Extends 面向物件的 繼承。
繼承的基本概念描述:
繼承中訪問成員變數的特點:(重名的使用規則)
在父子類的繼承關係當中,如果成員變數重名,則建立子類物件時,訪問有兩種方式:
直接通過子類物件訪問成員變數:
等號左邊是誰,就優先用誰,沒有則向上找。
間接通過成員方法訪問成員變數:
該方法屬於誰,就優先用誰,沒有則向上找。
父類:
1 public class Fu { 2 3 int numFu = 10; 4 5 int num = 100; 6 7 public void methodFu() { 8 // 使用的是本類當中的,不會向下找子類的 9System.out.println(num); 10 } 11 12 }
子類:
public class Zi extends Fu { int numZi = 20; int num = 200; public void methodZi() { // 因為本類當中有num,所以這裡用的是本類的num System.out.println(num); } }
。。。。
public class Demo01ExtendsField { public static void main(String[] args) { Fu fu= new Fu(); // 建立父類物件 System.out.println(fu.numFu); // 只能使用父類的東西,沒有任何子類內容 System.out.println("==========="); Zi zi = new Zi(); System.out.println(zi.numFu); // 10 System.out.println(zi.numZi); // 20 System.out.println("==========="); // 等號左邊是誰,就優先用誰 System.out.println(zi.num); //優先子類,200 // System.out.println(zi.abc); // 到處都沒有,編譯報錯! System.out.println("==========="); // 這個方法是子類的,優先用子類的,沒有再向上找 zi.methodZi(); // 200 // 這個方法是在父類當中定義的, zi.methodFu(); // 100 } }
區分子類中重名的三種變數。
父類:
public class fu { int num = 10; }
子類:
public class zi extends fu { int num = 20; public void method() {
int num = 30;
System.out.println(num); System.out.println(this.num); System.out.println(super.num); } }
。。。
public class Demo01ExtendsField { public static void main(String[] args) { zi zi = new zi(); zi.method(); } }
效果:
10
20
30
繼承中成員方法的訪問特點;
在父子類的繼承關係中,建立子類物件,訪問成員方法的規則:
建立的物件是誰,就優先用誰,如果沒有則向上找。(按照正常情況下 ,父類和子類都有相同的名稱的成員方法,
那就優先選擇子類的,後者再選擇父類。)
注意事項;
無論是成員方法還是成員變數,如果沒有都是向上找父類,絕對不會找向下找子類的。
=============================================================================
在父子類的繼承關係當中,建立子類物件,訪問成員方法的規則:
建立的物件是誰,就優先用誰,如果沒有則向上找。
注意事項:
無論是成員方法還是成員變數,如果沒有都是向上找父類,絕對不會向下找子類的。
重寫(Override)
概念:在繼承關係當中,方法的名稱一樣,引數列表也一樣。
重寫(Override):方法的名稱一樣,引數列表【也一樣】。覆蓋、覆寫。
過載(Overload):方法的名稱一樣,引數列表【不一樣】。
方法的覆蓋重寫特點:建立的是子類物件,則優先用子類方法。
================================================================================
方法覆蓋重寫的注意事項:
1. 必須保證父子類之間方法的名稱相同,引數列表也相同。
@Override:寫在方法前面,用來檢測是不是有效的正確覆蓋重寫。
這個註解就算不寫,只要滿足要求,也是正確的方法覆蓋重寫。
2. 子類方法的返回值必須【小於等於】父類方法的返回值範圍。
小擴充套件提示:java.lang.Object類是所有類的公共最高父類(祖宗類),java.lang.String就是Object的子類。
3. 子類方法的許可權必須【大於等於】父類方法的許可權修飾符。
小擴充套件提示:public > protected > (default) > private
備註:(default)不是關鍵字default,而是什麼都不寫,留空。
(但 大多數情況下 只要保證父子類的【方法名稱】和【引數列表】相同就可以了)