對功能的擴充套件是開放的
對源**的修改是關閉的
統一行為通過不同的子類,可體現出不同的形態
物件的多種形態
構成多型的條件:
(1)有繼承
(2)有方法的重寫
(3)父類的引用指向子類的物件(例項)
多型有編譯時和執行時的狀態「=」的左和右
編譯看左邊、執行看右邊
無法使用子類所獨有的資源
(1)繼承關係
(2)父類的引用指向子類的例項
(3)方法的重寫
注意:
(1)只對重寫方法的多型,不是對屬性的多型
(2)能使用子類重寫父類的方法不能使用子類自己獨有的資源
(3)能使用從父類繼承的方法
想要使用子類所獨有資源就向下轉型
方法:子類 名 = (子類)父類
向下轉型的前提:向上轉型
判斷左邊的物件是否為右邊型別的例項
用於向下轉型的判斷,防止出現型別轉換異常
修飾的變數為常量
修飾的類不能被繼承
修飾的方法不能被重寫
修飾的物件位址值不可改變
定義一種規範
抽象方法:使用abstract修飾的方法
不能擁有方法體 就是{}
(1)當乙個類繼承了乙個抽象類,則必須實現抽象類中抽象方法
或者將實現類也變成抽象類
(2)抽象類中可以存在普通的屬性,也可以存在普通的方法
(3)抽象類中可以沒有抽象方法
(4)抽象方法只能存在抽象類中
(5)子類需要實現所有的抽象方法,不僅父親要實現,爺爺也要實現
(6)抽象類不能建立方法,要借助子類來實現功能
抽象類:使用abstract修飾的類
定義了一種規範,表示has a的關係
宣告:
(1)許可權修飾符 inte***ce 介面名
(2)介面中的方法是抽象方法?
(3)乙個類實現了介面,則必須實現介面內的方法否則此類要變為抽象類
(4)當乙個類實現了介面,則此類可以作為此介面的子類存在
(5)乙個類可以實現多個介面必須實現各個介面中的方法,否則變為抽象類
(6)乙個介面可以繼承多個介面,實現此介面的類需要實現各個介面內的方法,
否則抽象類
(7)介面中的變數是全域性靜態常量預設被public、final、static修飾
(8)介面中的方法預設為抽象類
把乙個類定義代乙個類的內部
非靜態成員內部類:就是不加static
(1)寫到方法的外部類的內容
(2)可以被4個許可權修飾符修飾
(3)內部類可以使用外部類的屬性、方法
(4)外部類無法直接使用內部類中的方法
(5)編譯後的.class檔案是外部類名名字+$+內部類的名字.class
(6)建立內部類物件 外部類物件.內部類物件
靜態成員內部類:
(1)不能直接使用外部類中非靜態變數的資源(屬性、方法)
(2)外部類可以直接訪問內部類靜態的屬性 靜態的方法,非靜態屬性和方法
需要通過建立內部類物件的方式進行呼叫
區域性內部類:
(1)在方法的內部
(2)可以使用外部類的資源,外部類無法使用區域性類的資源
匿名類部類:
匿名內部類就是內部類的簡化寫法,是一種特殊的區域性內部類。
前提:存在乙個類或者介面,這裡的類可以是具體類也可以是抽象類。
內部類 抽象類 介面
b color brown size large 1.內部類也稱為巢狀類。內部類允許乙個類被定義在另乙個類,或乙個語句甚至乙個表示式中。在一般的內部類中是不允許宣告任何static成員的。只有頂層類可以宣告。如果要在一般內部類中使用static成員,必須引用在頂層類中宣告好的成員。外部類可以呼叫靜態...
0824學習筆記(多型 抽象類 介面 內部類)
同乙個物件不同時刻的不同形態。父類引用指向子類物件。優 提高了程式的擴充套件性。定義方法使用父型別為引數,使用時用具體的子型別參與操作。缺 不能使用子型別特有的功能。轉型 向上轉型 people p new student 父指向子,子轉父。抽象類 沒有方法體的方法是抽象方法。特點 抽象類的成員變數...
內部類,抽象類和介面
abstract普通類繼承抽象類要把抽象類中的所有抽象方法都覆蓋,抽象類繼承抽象類不用。抽象類不能被建立物件。普通類不能有抽象方法,抽象類可以有普通方法。建立了抽象父類的物件new後面是子類物件是可以實現的。implements用來繼承介面,inte ce介面中不存在具體的方法,介面中只存在抽象方法...