我們以前說過了java三大特性中的封裝,繼承兩大特性。下面我們來說最後一個特性——多態性。
就像它的名字一樣,多態是同一個行爲具有多個不同表現形式或形態的能力。
多態就是同一個接口,使用不同的實例而執行不同操作。
我個人理解就是,可以實現對相同方法名進行不同的定義(專業名overload , 重載)或者重寫(專業名override , 重寫),前者可以通過不同的參數個數或者類型來進行區分。後者就是直接對原方法進行覆蓋(重寫)。
也就是對於同一個方法名我們可以通過重載來實現不同的多樣的方法內容或者功能。或者我們可以通過重寫來實現對原方法的重新編寫(對原方法功能直接進行更改)。
可能比較抽象和難理解,我們通過代碼來進行解釋吧:
首先自己編寫一個方法類:
package com.zzxtit.test1;
public class DuoTai {
//定義一個包含方法的類
//定義一個名字爲show的無參方法
public void show()
{
System.out.println("這是第一個方法");
}
//定義一個同樣名字爲show的方法但是有一個int型參數
public void show(int a)
{
System.out.println("這是第二個方法");
}
//定義一個同樣名字爲show的方法但是有
//兩個int,String類型的參數
public void show(int a,String b)
{
System.out.println("這是第三個方法");
}
}
重載的測試:
package com.zzxtit.test1;
public class Main {
public static void main(String[] args) {
DuoTai du = new DuoTai();
du.show();
du.show(1);
du.show(1, "a");
}
}
運行結果:
也就是我們調用的都是名字爲show
的方法,但是我們可以通過控制參數來實現不同的功能。重載的規則:
1,方法名必須一樣。
2,方法的參數必須包含以下一點不同:
- 參數數量不同
- 參數類型至少一個不同
注意 :只有參數名字不同,但是數量和類型都相同的是不合規的
另外我們通過重寫可以實現在子類中對父類方法的修改:
就比如我們新建一個子類,要實現對show()
方法的修改。
package com.zzxtit.test1;
public class DuoTai2 extends DuoTai{
//實現對父類中show()方法的修改
public void show()
{
System.out.println("這是修改過後的第一個方法");
}
}
我們通過main方法進行測試:
所以我們就實現了show()方法的重寫,其他方法不改變。
重寫規則:
- 方法方法名相同,參數類型相同,
- 子類返回的類型等於父類返回的類型
- 子類拋出的異常小於等於父類拋出的異常
- 子類訪問權限大於等於父類的訪問權限
注意:聲明爲final的方法不能被重寫,聲明爲static的方法不能被重寫,
好了,那麼java的三大面向對象的特性就說完了,希望會對你們有一點幫助!