2019-10-26-22:40:09 目錄: 1.多態的概念 2.多態的分類 3.實現多態的三個必要條件 4.多態的格式 5.多態成員變數的使用特點 6.多態成員方法的使用特點 7.多態的好處 8.多態的向上和向下轉型 1.多態的概念: 多態性是面向對象編程的又一個重要特征,它是指在父類中定義的屬 ...
2019-10-26-22:40:09
目錄:
1.多態的概念
2.多態的分類
3.實現多態的三個必要條件
4.多態的格式
5.多態成員變數的使用特點
6.多態成員方法的使用特點
7.多態的好處
8.多態的向上和向下轉型
1.多態的概念:
多態性是面向對象編程的又一個重要特征,它是指在父類中定義的屬性和方法被子類繼承之後,可以具有不同的數據類型或表現出不同的行為,這使得同一個屬性或方法在父類及其各個子類中具有不同的含義
2.多態的分類:
編譯時多態(靜態):主要是指方法的重載,它是根據參數列表的不同來區分不同的方法
運行時多態(動態):它是通過動態綁定來實現的,也就是大家通常所說的多態性。
3.實現多態的三個必要條件:
1. 繼承:在多態中必須存在有繼承關係的子類和父類。
2.重寫:子類對父類中某些方法進行重新定義,在調用這些方法時就會調用子類的方法。
3.向上轉型:在多態中需要將子類的引用賦給父類對象,只有這樣該引用才既能可以調用父類的方法,又能調用子類的方法。
1 package demosummary.polymorphic;
2
3 public class Fu {
4 //定義兩個變數
5 double d1;
6 double d2;
7
8 //無參構造
9 public Fu() {
10 }
11
12 //全參構造
13 public Fu(double d1, double d2) {
14 this.d1 = d1;
15 this.d2 = d2;
16 }
17
18 //設置一個方法
19 public void area(double d1,double d2){
20 }
21 }
1 package demosummary.polymorphic;
2 //創建一個繼承父類的子類
3 public class Zi extends Fu{
4 //重寫父類中的方法
5 @Override
6 public void area(double d1, double d2) {
7 double result = d1 * d2;
8 System.out.println("計算結果:"+result);
9 }
10
11 //測試方法
12 public static void main(String[] args) {
13 //向上轉型(多態的寫法)
14 Fu obj = new Zi();
15 obj.area(3.5,3.5);
16 }
17 }
4.多態的格式:
父類名稱 對象名 = new 子類名稱();
介面名稱 對象名 = new 實現類名稱();
5.多態成員變數的使用特點:
1.直接通過對象名稱訪問成員變數:看等號左邊是誰,優先用誰,沒有則向上找。
2.間接通過成員方法訪問成員變數:看該方法屬於誰,優先用誰,沒有則向上找。
1 package demosummary.polymorphic;
2 //定義一個父類
3 public class Fu01 {
4 //定義一個成員變數
5 int num = 10;
6 //定義一個成員方法
7 public void showNum(){
8 //定義一個局部變數
9 // int num01 = 100;
10 System.out.println(num);
11 // System.out.println(num01);
12 }
13 }
1 package demosummary.polymorphic;
2
3 public class Zi01 extends Fu01{
4 //定義一個成員變數
5 int num = 20;
6 //覆蓋重寫父類方法
7 @Override
8 public void showNum() {
9 //定義一個局部變數
10 // int num01 = 200;
11 System.out.println(num);
12 // System.out.println(num01);
13 }
14 //定義一個測試類
15 public static void main(String[] args) {
16 Fu01 obj = new Zi01();
17 System.out.println(obj.num);
18 obj.showNum();
19 }
20 }
6.多態成員方法的使用特點:
在多態的代碼當中,成員方法的訪問規則是:
看new的是誰, 就優先用誰,沒有則向上找。
口訣:編譯看左邊,運行看右邊。
對比一下:
成員變數:編譯看左邊,運行還看左邊。
成員方法:編譯看左邊,運行看右邊。
7.多態的好處:
不使用多態的寫法:
Teacher one = new Teacher();
one.work();
Assistant two = new Assistant();
two.work();
使用多態的寫法:
Employee one = new Teacher();
one.work();
Employee two = new Assistant();
two.work();
對比結論:無論右邊new的時候換那個子類對象,等號左邊調用方法都不會變化
8.多態的向上和向下轉型:
向上轉型:
父類名稱 對象名 = new 子類名稱();
含義:右側創建一個子類對象,把它當成父類看待使用
註意事項:向上轉型一定是安全的,從小範圍轉向大範圍
向下轉型:
子類名稱 對象名 = (子類名稱)父類對象;
含義:將父類對象還原成為本來的子類對象
註意事項
1.必須保證對象本來創建的時候。就是貓。才能向下轉型成為貓。
2.如果對象創建的時候本來不是貓,現在非要向下轉型成為貓,就會報錯。