繼承 重載 重寫 多態 不定參數

繼承

這裏寫圖片描述

1. 繼承環境下的子類對象構造問題

Animal.java
這裏寫圖片描述
Tiger.java
這裏寫圖片描述
【即】得先打掃(構造)父類再打掃(構造)子類

2. 繼承環境下的引用變量指向問題

這裏寫圖片描述
① 父類引用變量可以指向子類對象(萎縮效應)
Tiger a=new Tiger();//年輕人用iPhone6
Animal a=new Tiger();//中年人用iPhone6
Object a=new Tiger();//老年人用iPhone6
② 子類引用變量不能指向父類對象
Tiger a=new Animal();//×動物不可以當成老虎

重載

參數不同則構成重載,具體規則如下:

  1. 參數數量不同
  2. 對應參數位置的參數數據類型不同

案例:

int add( int a , int b);
int add( int a, int b, int c);
int add(int a, double c);
int add( int a, int d); [參數名不列入重載考慮範圍,構成重名]
void add( int a, int b); [返回值不列入重載考慮範圍,構成重名]

編譯器本質上是不允許方法重名的,這在面向對象編程語言中也是這樣的, 在程序員的呼籲中,編譯器的開發者提供了能夠名字重複使用的機制,但編譯器最終將把方法名做修正,比如:

int add( int a , int b); add_int_int
int add( int a, int b, int c); add_int_int_int

重寫

重寫的模式從內容實現上分爲2種:

  1. 改良性,補充型重寫:對父親提供的方法內容進行補充。(保留父類方法)
  2. 顛覆性重寫:完全否定父親所提供的方法內容,徹底改寫。

重寫不是覆蓋掉父親的方法,父親該方法在子類內部還是存在的。在內存中,體現爲子類和父類兩個同簽名方法共存的現象。在子類方法中,可以通過super.來顯示調用父類被重寫的方法,如果不用super. ,則表示調用子類的該重寫方法。

繼承環境下子類方法設置的可能情況:

Class A{
void sayHello(int a, int b)
}

Class B extends A{
Void sayHello(int a, int b){ //在子類中,出現和父類方法同簽名,則爲重寫
……..
}

Void tellYouSomething(int a){ //方法名和所有父類方法均不同,稱爲子類自定義新方法
}

Void sayHello(int a, int b, int c){ //子類對父類方法的簽名做部分改造,叫做跨類重載
}
}

補充:
這裏寫圖片描述
這裏寫圖片描述

這裏寫圖片描述

多態

這裏寫圖片描述
Tiger.java
這裏寫圖片描述
chineseTiger.java
這裏寫圖片描述
Tester.java
這裏寫圖片描述

多態用法舉例
這裏寫圖片描述
【即】爲今後變成框架代碼提供了可能,適合用來編寫通用底層代碼

不定參數

double add(int a, int b, double... m){  //m是一個double型數組 
         double sum=a+b;         
         for(int i=0;i < m.length;i++)
             sum=sum+m[i];       
         return sum;         
}

不定參數是爲了方便參數數量不確定的情況,以提高方法簽名的高度兼容性。
m最終將會被理解爲 double[], 一個方法簽名的不定參數只能有一個,而且是最後一個。

舉例:

public class VariArgs {  

    public static void main(String[] args) {  
        test();  
        test("aaa");  
        test("aaa", "bbb");  
        test("aaa", "bbb", "ccc");  
    }  

    public static void test(String... args) {  
        System.out.println(args.getClass());  
        for (String arg : args) {  
            System.out.println(arg);  
        }  
    }  
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章