【java】【多型】的一個小例子
阿新 • • 發佈:2018-12-23
首先要了解什麼是多型?
:在面嚮物件語言中,介面的多種不同的實現方式即為多型。具體來說,就是不同子類作為引數使用同一父類的方法
時的實現方法是不同的。
多型的表現形式有哪些?
1.過載overload,是發生在同一類裡的。
標識一個函式除了函式名外,還有函式的引數(個數和型別),也就是說,一個類中可以有兩個或更多的函式,叫同一個名字而他們的引數不同。簡單來說
就是對重名函式進行重寫,往往根據引數的不同來區分。
2、覆蓋override,是發生在父類和子類之間的。這種關係要求必須有extends(繼承)。
實現多型的技術是什麼?
動態繫結。是指在執行期間判斷引用物件的型別,根據其實際的型別呼叫其相應的方法。
多型存在的必要條件是什麼?
1.要有繼承
2.要有重寫override
3.父類引用指向子類物件(常用instanceof來判斷)
使用多型有哪些好處?
1.可替換性 2.可擴充性 3.介面性 4.靈活性 5.簡化性
下面給一個自己寫的多型override的小例子:
其中A,B類是Main類的子類,C是A的子類,改變class A extends Main{ public String show(A obj) { System.out.println("呼叫了A的show方法"); return "A"; } } class B extends Main{ public String show(B obj) { System.out.println("呼叫了B的show方法"); return "B"; } } class C extends A{ public String show(C obj) { System.out.println("呼叫了C的show方法"); return "C"; } } public class Main{ public static void main(String[] args) { Main u = new Main(); A a = new A(); B b = new B(); C c = new C(); System.out.println(u.show(c));//改變c的值為a,b,看結果 } public String show(Main main) { if(main instanceof A) { System.out.println("以A類為物件呼叫show方法"); } if(main instanceof B) { System.out.println("以B類為物件呼叫show方法"); } if(main instanceof C) { System.out.println("以C類為物件呼叫show方法"); } return "main"; } }
(u.show(c))
的值。
特別的,如果Main引用指向C物件,那麼它同時也指向C物件的父類:A物件。
所以結果是這樣的:
以A類為物件呼叫show方法
以C類為物件呼叫show方法
main