有關final關鍵字的特點:
表示:最終的,無法更改(狀態修飾符)
final修飾類,該類不能被繼承!
final可以修飾成員變數,該變數此時是乙個常量(常駐記憶體!
) 自定義常量的時候:
public
static
final 資料型別 變數名 = 初始化;
final可以修飾成員方法,該方法不能被重寫
final修飾的變數:只能被賦值一次(它的值不能再被更改了!
)
常量的分類:
字面值常量
自定義常量(
final修飾的)
final修飾基本型別的變數和引用型別的區別?
final修飾的基本數
據型別的變數:它的資料值不能再改變了(具體的資料值)
final修飾的引用資料型別,它的位址值不能再改變了(但是成員變數的值不影響!
)
什麼是多型?
乙個事物在不同時刻顯示出的不同狀態(在堆記憶體中的變化)
多型的前提條件:
1)必須存在繼承關係 (繼承的好處第三點)
2)要有方法重寫 :
3)需要存在:父類引用指向子類物件 (向上轉型:使用的父類的東西,必須編譯看左邊!
) 格式:父類名 物件名 =
new 子類名();
多型的成員訪問特點:
父類名 物件名 =
new 子類名();
1)成員變數: 編譯看左,執行看左邊
2)成員方法:
(非靜態的)
:編譯看左邊,執行看右(因為存在子類覆蓋父類的方法:方法重寫)
3)靜態的成員方法:編譯看左,執行看左
(子類出現了和父類一摸一樣的靜態方法,靜態方法跟類相關,不存在重寫!
,訪問方式:類名.方法名())
4)構造方法:
由於存在繼承關係,還需要分層初始化!
方法重寫:指的是非靜態方法!
多型的好處:
1)提高了**的擴充套件性(由多型)
2)提高了**的復用性,維護性(由繼承關係保證)
多型的弊端:
不能夠訪問子類的特有功能!
如何解決呢?
方式1:可以建立子類具體類物件 :子類名 物件名 =
new 子類名();
物件名.訪問子類的自己的功能;
但是,不好,從記憶體角度考慮,在堆記憶體中產生乙個記憶體空間(比較消耗記憶體空間!
) 方式2
: 多型的第三個條件:父類引用指向子類物件 (向上轉型)
fu f =
newzi()
; 想辦法:將父類的引用強制轉換為子類的引用(向下轉型)
zi z =
(zi)f;
好處:不需要重新new物件,在堆記憶體是比較節省記憶體空間的!
前提條件:要使用向下轉型,必須先使用向上轉型!
多型的向下轉型使用不當,程式出現異常:
注意事項:
產生乙個classcastexception:執行時期異常(runtimeexception)的一種
使用向下轉型的時候型別不匹配導致的!
解決方法:檢視強制轉換是否正確
物件導向之多型
多型即事物存在的多種形態 要有繼承 要有方法重寫 要有父類引用指向子類物件 1,多型中的成員訪問特點之成員變數 編譯看左邊 父類 執行看左邊 父類 2,多型中的成員訪問特點之成員方法 編譯看左邊 父類 執行看右邊 子類 3,多型中的成員訪問特點之靜態成員方法 編譯看左邊 父類 執行看左邊 父類 總結...
物件導向之多型
多型指的是一類事物有多種形態,多型性是指在不考慮例項型別的情況下使用例項 class animals def run self print running class dog animals def run self print dog is running class pig animals de...
物件導向之多型
多型指的是一類事物有多種形態 動物有多種形態 人,狗,豬 import abc class animal metaclass abc.abcmeta 同一類事物 動物 abc.abstractmethod deftalk self pass class people animal 動物的形態之一 人...