java多型繼承

2021-08-22 02:40:35 字數 4401 閱讀 1278

繼承中的成員方法訪問特點:

子類繼承父類,當成員方法名稱不一致的時候,分別呼叫

當成員方法名稱一致的情況,首先在子類中有麼有該方法,如果有,就呼叫;如果沒有,就呼叫父類的成員方法;

方法重寫:override:繼承裡面的技術

當子類出現了和父類一模一樣的方法的時候,子類的方法會重寫(覆蓋,複寫)父類的方法,呼叫的子類的功能

方法過載:overload:方法裡面的

在方法中,多個方法名相同,並且他的引數列表不同,與返回值無關

引數列表不同:

1)引數個數不同

2)引數型別不同     

class phone

}//新手機

class newphone extends phone

}//測試類

public class extendsdemo2

}

在實際開發中,有些方法不能直接覆蓋的,這對這種情況,不想讓子類重寫父類的方法,引出final關鍵字

final:最終的,終態的,無法更改的!

可以修飾類,變數,成員方法! 

final的用法:

final可以修飾類,該類不能被繼承!

final可以修飾變數(可以成員變數,區域性變數),這個變數此時乙個常量

final可以修飾成員方法,方法不能被重寫

常量的分類

字面值值常量

自定義常量    final 

比如動物吃的功能,每個具體的動物吃的功能不一樣,在當前類中只是給出乙個方法宣告(抽象的,不帶方法體)

在乙個類中,給出乙個抽象功能,就必須將這個類定義為抽象類!

抽象類的格式

abstract class 父類名(animal)

抽象方法的格式:

public abstract(必須寫)  方法名() ;  //抽象方法

注意:1)如果乙個類中有抽象方法,那麼這個類一定抽象類

2)抽象類中一定有抽象方法嗎? 還可以非抽象的

抽象類的特點:

1)抽象類不能直接例項化(不能直接建立物件)

2)子類必須重寫父類的抽象功能 

抽象類的子類:

1)抽象類的子類如果是抽象類呢? 沒有任何意義,因為使用的就是通過具體類建立物件,具體類都抽象類,沒意義!

2)子類是具體類的話,物件的建立工作,由子類完成--->父類名  物件名 = new 子類名() ; 抽象類多型

抽象類成員的特點:

成員變數:

可以是變數,也可以是乙個常量(自定義常量)

構造方法:

所有的構造方法都是給物件進行初始話:1)預設初始化 2)顯示初始化

成員方法:

可以是抽象的方法,也可以非抽象的方法

多型:某個事物在不同時刻體現出來的不同狀態!

*         水:        事物

*         液態    氣態   固態

* *         貓狗案例:

*             建立乙個貓類的物件            右-->左

*             cat cat = new cat() ; //貓是貓

*             animal a = new cat() ;//也是另外一種方式:貓是動物

* * 多型的前提條件:

*         1)必須有繼承關係

*         2)必須方法重寫

*             貓狗案例:每個動物具體的吃的功能是不一樣,必須有方法重寫,將父類的功能覆蓋掉!

*         3)必須有父類引用指向子類物件        :向上轉型

*                 格式:

*                     父類名  物件名  = new 子類名() ;

* * 多型中的成員訪問特點

*         1)成員變數的訪問特點:

*             編譯看左,執行看左    (左:父類)

*         2)成員方法(一般沒有強調靜態方法都是非靜態的)的訪問特點:

*             編譯看左,執行看右

*         3)構造方法:作用:就是給物件進行初始化的

*         4)靜態的成員方法的訪問特點:

*             編譯看左,執行看左(靜態的成員方法算不上方法重寫,因為靜態的都和類有直接關係!)

多型的好處:

*         1)提高**的擴充套件性(由多型保證)

*         2)提高**的維護性(由繼承關係)

//動物類

class animal

public void sleep()

}//貓類

class cat extends animal

public void sleep()

}//狗類

class dog extends animal

public void sleep()

}//提供一些其他動物類的

//豬類

class pig extends animal

public void sleep()

}/動物工具類

class animaltool

}//測試類

public class duotaidemo2

//使用該功能呼叫eat(),sleep()

public static void usecat(cat c)

public static void usedog(dog d)

//提供一些其他動物的同時,還需提供u***xx方法

}

多型的弊端:

*         不能訪問子類特有功能

class father

}class son extends father

public void function()

}//測試類

public class duotaidemo3

}

最優秀的方式:使用向下轉型:將父類物件強制轉換為子類的引用

*             格式:

*                 子類名  子類物件名 = (子類名)父類的物件;

class animal2 

public void sleep()

}class cat2 extends animal2

public void sleep()

}//狗類

class dog2 extends animal2

public void sleep()

}//測試類

public class duotaidemo4

}

介面:(開發過程中要遵循面向介面程式設計!)

*         將一些額外(擴充套件)功能,暴露出來,只要哪些類實現了這個介面,就一定要取實現介面中的功能!

*         

*     格式:

*         inte***ce 介面名

* * 介面的實現類和介面之間是一種實現關係

*         class 類名  implements(實現) 介面名

* 介面的子實現類:

*         1)如果介面的實現類是乙個抽象類;沒有意義,介面本身不能例項化,需要通過子實現類來進行例項化,如果子實現類

* 都被抽象了,不能建立物件了,這種沒意義!

*         2)介面的實現類是具體類,介面名 物件名 = new 子實現類名() ; 介面多型(推薦方式:開發中這種方式最多)

* * 介面不能例項化(不能建立物件)

* * 實際開發中命名規則:

*     實現類命名規則:介面名+impl :實現類

介面的成員特點:

*         成員變數:

*             存在預設的修飾符:    public static finla

*         構造方法:介面中沒有構造方法

*         成員方法:

*             預設的修飾符:public abstract

關係的區別:

*     類與類的關係

*             extends:繼承關係     單繼承,不能多繼承,但是可以多層繼承

*     類與介面的關係:implements :實現關係 ,並且乙個類繼承另乙個類的同時還能實現多個介面

*     

*     介面與介面的關係:

*             extends關係:可以是單繼承,可以是多繼承的!

* * 

* 任何類都需要繼承自object類,代表所有類的根類.

java繼承多型

1 final關鍵字可以幹什麼?有什麼特點?修飾類,使得類不能被繼承 修飾變數,相當於const,變數不能被更新 修飾方法,方法不能被重寫override 2 final關鍵字的面試題?a 修飾區域性變數 基本型別 值不變 引用型別 位址不變,例如在乙個類中再new乙個其他類的final物件d,則d...

Java介面 繼承 多型

介面是為了解決多繼承問題 修飾符 inte ce 介面名 extends 父介面名列表 注意 修飾符可預設,父介面名列表可省略,但是一旦寫了extends就不能省略 與類相同介面檔名與介面相同 介面可以繼承 介面名稱前面有大寫l 實現介面 修飾符 class 類名 extends 父類名 imple...

java介面 繼承 多型

在建構函式中,如果第一行沒有寫super 編譯器會自動插入 需要注意的是子類不是一定要初始化父類,但當父類沒有無引數的建構函式時或者無引數建構函式為private時,需要手動呼叫有引數的建構函式 在obect類中主要包括equals tostring clone finalize方法 常用的方法 g...