1.什么是多態
面向對象的多態性就是將父類對象應用到子類對象的特征。簡單地講,多態指的就是在應用程序中出現的“重名”現象。多態性允許以統一的風格編寫程序,以處理種類繁多的已存在的類和相關類。這樣既降低了維護的難度,又節省了時間。
2.在java語言中,多態性體現在哪些方面
- 方法重載: 通常是指在同一個類中,相同的方法名對應着不同的方法實現,這些方法名相同的方法其區別在於他們需要的參數不同。即采用不同的方法形參表,區分重載方法要求形參在數據類型、個數和順序的不同。(見實例2.1)
- 方法重寫: 方法重寫主要用於父類和子類間。子類重寫父類的方法,只是對應的方法實現不同,其方法名和參數都相同。(見實例2.2)
- 抽象類: 在java語言中,一個類中的方法只給出了標准,而沒有給出具體的實現方法,這樣的類就是抽象類。例如父類就是抽象類,它不會被實例化的類。
- 接口: 在多態機制中,接口比抽象類使用起來更加方便。而抽象類組成的集合就是接口。
實例2.1 該類中聲明了兩個show方法,但是兩個方法的形式參數是不同,所以說第二個show方法重載了第一個show方法
1 /* 定義類TestPolymorphisml*/ 2 public class TestPolymorphisml { 3 4 String s="這是方法重載的實例"; 5 String ss="這是一個TestPolymorphisml類"; 6 public void show(){ 7 System.out.println("我是show方法"+ss); 8 } 9 public void show( String str){ //這個方法就是對上一個show方法的重載,方法名相同,只是他們需要的形參不一樣 10 System.out.println("我重載了show方法"+str); 11 } 12 public static void main(String[] args) { 13 TestPolymorphisml test = new TestPolymorphisml(); 14 test.show(); //對象調用第一個show方法 15 test.show(test.s); //調用重載的show方法 16 } 17 }
運行結果:
實例2.2 先新建一個A類,再建一個類繼承A類,在子類中對父類的屬性和方法進行重寫
1 /*定義A類*/ 2 public class A { 3 String a="我是A類"; 4 public void showA(){ 5 System.out.println(a); 6 } 7 }
1 /*定義類TestPolymorphism2 讓它繼承A類*/ 2 public class TestPolymorphism2 extends A{ 3 String b="我是重寫方法"; //這是對父類的a屬性的重寫 4 public void showA(){ //這是對父類showA方法的重寫 5 super.showA(); //使用關鍵字super調用父類的showA方法 6 System.out.println(b); 7 } 8 public static void main(String[] args) { 9 TestPolymorphism2 n = new TestPolymorphism2(); //創建對象n 10 n.showA(); 11 } 12 }
運行結果:
在實驗中我們可以很清晰的看出多態性在java語言編程中占着多么重要的地位。