最近在找工作,發現java基礎好多記不太清了,寫篇文章記錄下,也希望對你有幫助,有不對或不嚴謹的地方望不吝賜教。
面向對象的基本要素:封裝,繼承,多態
封裝:隱藏事物內部實現細節,以提高安全性和簡化編程。合理的定義邊界來避免外部使用者接觸到內部的細節。
繼承:繼承是代碼復用的機制,子類會繼承父類的特征與行為。但是一種緊耦合的實現,父類修改代碼會改變子類的行為。
多態:多態是一種同一個行為可以具有多個不同表現形式或形態的能力。講到多態可能會立即想到重寫、重載和向上轉型。重寫是父子類中重名方法和參數的不同實現。重載是同名方法和返回值不同參數的實現。向上轉型是說父類的引用指向子類對象。
抽象類與接口
抽象類是不能實例化的類,用abstract關鍵字修飾class,目的主要是代碼重用。抽象類的抽象方法可以有0到N個。大多使用于抽取相關java類中的共同方法或成員變量,然后通過繼承的方式來達到代碼復用的目的。
接口是對行為的抽象,是抽象方法的集合,利用接口可以達到API定義和分類的目的。接口中任何變量都隱式聲明為public static final,任何方法都隱式聲明為public abstract。使用接口需要注意接口分離(Interface Segregation),畢竟接口每次改變都需要去修改對應的實現類。也要盡量保持接口小粒度,畢竟不是所有實現類會用到接口中所有的方法。
在使用中能用接口的地方就不要使用抽象類,畢竟java是單繼承的。
static和final
使用抽象類和接口的時候難免會用到static和final來修飾。
final可以用來修飾類、方法和變量,分別有不同的意義。用來修飾class表示不可繼承與擴展,用來修飾變量表示不可修改,用來修飾方法表示不可重寫。final對象產生了某種程度上的不可不(immutable)效果,但它并不等同于immutable。final只能約束對象的引用不可被賦值,但是不會影響到對象的行為,例如用final修飾一個List,再給list添加元素是完全正常的。
static方便在沒有創建對象的情況下來進行調用(方法/變量)。在類被加載的時候創建,不可調用非靜態方法或成員變量,畢竟非靜態方法或變量在創建對象的時候才會初始化。
文章部分內用引自極客時間上楊曉峰的《java核心技術36講》,侵權即刪。小伙伴們有時間可以去聽聽《java核心技術36講》這個專欄。