初識JAVA-多態向上轉型與向下轉型
多態:
程序定義的引用變量所指向的具體的類和通過該變量發出的方法調用,在編程時並不確定,在程序運行時期間才被確定。
條件:
1.首先要有繼承或接口的實現
2.子類要對父類的方法進行重寫
這裏我們先用一個列子來初始一下多態 這裏使用到了向上轉型後面我們會涉及到
這是運行的結果,我們會看到結果爲“這是子類的方法”這說明調用的是子類的方法
靜態綁定和動態綁定
首先我們先了解一下靜態綁定 對於這幾個關鍵詞 static ,final, private 都應該有所瞭解吧 這裏不過多說明,這裏主要使用static修飾的方法舉例。
對於動態綁定和靜態綁定我個人的見解就是:
動態綁定:在編譯時並無法確定調用哪個方法,而在程序運行時才知道
靜態綁定:在編譯時就知道
讓我們看例子
這是運行後的結果:我們看到是“這是父類的方法”;說明調用的是父類的靜態的方法。這裏static修飾的方法,子類對其父類的方法重寫毫無意義。
重載
首先重載是不是多態呢?
重載:方法名相同只不過方法的參數不同,但是編譯器按照不同的參數對同名的方法進行修飾,使方法變得不同。
這裏我們回頭再看看多態:指子類重寫父類的方法(虛方法)然後父類引用變量指向子類去調用方法時,編譯器在編譯時並無法確定調用了誰的方法。
多態就是對父類的方法重新定義,但並不改變方法的參數。
向上與向下轉型
前面的例子我們用到的是向上轉型就是父類引用變量指向子類調用子類的方法。這裏的方法是子類父類共有的方法,但並不是子類特有的方法。
father f = new son();
f.show();//調用子類的方法
這裏我們都可以理解,但是對於向下轉型呢?
我的理解就是,如果繼承子類但是通過父類引用變量去指向子類調用方法時,如果想要調用子類特有的方法是呢?這裏我們就使用到向下轉型
看一個例子
運行結果爲子類特有的方法;
最後我們對與關鍵字instanceof使用講解
在使用向下轉型或向上轉型的小夥伴,不免會對於父類所引用的變量指向的子類時會用改變量,去調用另一個子類的方法,這時使用instanceof他的返回值爲Boolean類型可以判斷是否爲該類下引用的變量。
father f = new son;
if(f instanceof son)//若符合則返回true;
到這對於多態的相關問題就這些,可能本人能力有限,最主要的還是去多寫寫小項目去應用一下,這是我個人的理解,如有問題,希望可以多多指點。