1. 程式人生 > >抽象類,多態以及接口的知識內容梳理

抽象類,多態以及接口的知識內容梳理

名稱 單繼承 異常 nim err 返回值 接口編程 自定義常量 static

抽象類的格式
abstract class 父類名(Animal){
}
抽象方法的格式:
public abstract(必須寫) 方法名() ;
註意:
1)如果一個類中有抽象方法,那麽這個類一定抽象類
2)抽象類中一定有抽象方法嗎? 還可以非抽象的
抽象類的特點:
1)抽象類不能直接實例化(不能直接創建對象)
2)子類必須重寫父類的抽象功能
抽象類的子類:
1)抽象類的子類如果是抽象類呢? 沒有任何意義,因為使用的就是通過具體類創建對象,具體類都抽象類,沒意義!

     2)子類是具體類的話,對象的創建工作,由子類完成--->父類名  對象名 = new 子類名() ; 抽象類多態

實際工作中:
1)接口多態(用的最多)

2)抽象類多態
3)具體類對象的創建
抽象類成員的特點:
成員變量:
可以是變量,也可以是一個常量(自定義常量)
構造方法:
所有的構造方法都是給對象進行初始話:1)默認初始化 2)顯示初始化
成員方法:
可以是抽象的方法,也可以非抽象的方法

多態:某個事物在不同時刻體現出來的不同狀態!
    水:      事物
    液態  氣態   固態
        多態的前提條件:
    1)必須有繼承關系
    2)必須方法重寫
        貓狗案例:每個動物具體的吃的功能是不一樣,必須有方法重寫,將父類的功能覆蓋掉!
    3)必須有父類引用指向子類對象     :向上轉型
            格式:
                父類名  對象名  = new 子類名() ;

多態中的成員訪問特點
1)成員變量的訪問特點:
編譯看左,運行看左 (左:父類)
2)成員方法(一般沒有強調靜態方法都是非靜態的)的訪問特點:
編譯看左,運行看右
3)構造方法:作用:就是給對象進行初始化的
4)靜態的成員方法的訪問特點:
多態的好處:
1)提高代碼的擴展性(由多態保證)
2)提高代碼的維護性(由繼承關系) 編譯看左,運行看左(靜態的成員方法算不上方法重寫,因為靜態的都和類有直接關系!)
多態的弊端:
不能訪問子類的特有功能.
最優秀的方式:使用向下轉型:將父類對象強制轉換為子類的引用
格式:
子類名 子類對象名 = (子類名)父類的對象;
註意:
向下轉型使用不當的時候,會出現一個異常:ClassCastExceptino:類轉換異常

類的初始化
繼承過程中,分層初始化;首先父類初始化,然後是子類
創建一個類的對象的時候,是通過構造方法創建對象,構造方法的作用:給對象進行初始化話的
繼承中的成員方法訪問特點:
子類繼承父類,當成員方法名稱不一致的時候,分別調用
當成員方法名稱一致的情況,首先在子類中有麽有該方法,如果有,就調用;如果沒有,就調用父類的成員方法;
方法重寫:override:繼承裏面的技術
當子類出現了和父類一模一樣的方法的時候,子類的方法會重寫(覆蓋,復寫)父類的方法,調用的子類的功能
方法重載:overload:方法裏面的
在方法中,多個方法名相同,並且他的參數列表不同,與返回值無關
參數列表不同:
1)參數個數不同
2)參數類型不同
接口:(開發過程中要遵循面向接口編程!)
將一些額外(擴展)功能,暴露出來,只要哪些類實現了這個接口,就一定要取實現接口中的功能!
格式:
interface 接口名{
}
接口的實現類和接口之間是一種實現關系
class 類名 implements(實現) 接口名{
}
接口的子實現類:
1)如果接口的實現類是一個抽象類;沒有意義,接口本身不能實例化,需要通過子實現類來進行實例化,如果子實現類
都被抽象了,不能創建對象了,這種沒意義!
2)接口的實現類是具體類,接口名 對象名 = new 子實現類名() ; 接口多態(推薦方式:開發中這種方式最多)
接口不能實例化(不能創建對象)
實際開發中命名規則:
實現類命名規則:接口名+impl :實現類
接口的成員特點:
成員變量:
存在默認的修飾符: public static finla
構造方法:接口中沒有構造方法
成員方法:
默認的修飾符:public abstract
關系的區別:
類與類的關系
extends:繼承關系 單繼承,不能多繼承,但是可以多層繼承
類與接口的關系:implements :實現關系 ,並且一個類繼承另一個類的同時還能實現多個接口
接口與接口的關系:
extends關系:可以是單繼承,可以是多繼承的!
任何類都需要繼承自Object類,代表所有類的根類.

抽象類,多態以及接口的知識內容梳理