1. 程式人生 > 實用技巧 >Extends 面向物件的 繼承。

Extends 面向物件的 繼承。

  繼承的基本概念描述:

繼承中訪問成員變數的特點:(重名的使用規則)

在父子類的繼承關係當中,如果成員變數重名,則建立子類物件時,訪問有兩種方式:

直接通過子類物件訪問成員變數:
等號左邊是誰,就優先用誰,沒有則向上找。
間接通過成員方法訪問成員變數:
該方法屬於誰,就優先用誰,沒有則向上找。

父類:

 1 public class Fu {
 2 
 3     int numFu = 10;
 4 
 5     int num = 100;
 6 
 7     public void methodFu() {
 8         // 使用的是本類當中的,不會向下找子類的
 9
System.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,而是什麼都不寫,留空。

(但 大多數情況下 只要保證父子類的【方法名稱】和【引數列表】相同就可以了)