最近在找工作瞄沙,發(fā)現(xiàn)java基礎(chǔ)好多記不太清了,寫篇文章記錄下朴皆,也希望對你有幫助帕识,有不對或不嚴(yán)謹(jǐn)?shù)牡胤酵涣哔n教。
面向?qū)ο蟮幕疽兀悍庋b遂铡,繼承肮疗,多態(tài)
封裝:隱藏事物內(nèi)部實現(xiàn)細(xì)節(jié),以提高安全性和簡化編程扒接。合理的定義邊界來避免外部使用者接觸到內(nèi)部的細(xì)節(jié)伪货。
繼承:繼承是代碼復(fù)用的機制,子類會繼承父類的特征與行為钾怔。但是一種緊耦合的實現(xiàn)碱呼,父類修改代碼會改變子類的行為。
多態(tài):多態(tài)是一種同一個行為可以具有多個不同表現(xiàn)形式或形態(tài)的能力宗侦。講到多態(tài)可能會立即想到重寫愚臀、重載和向上轉(zhuǎn)型。重寫是父子類中重名方法和參數(shù)的不同實現(xiàn)矾利。重載是同名方法和返回值不同參數(shù)的實現(xiàn)姑裂。向上轉(zhuǎn)型是說父類的引用指向子類對象馋袜。
抽象類與接口
抽象類是不能實例化的類,用abstract關(guān)鍵字修飾class舶斧,目的主要是代碼重用欣鳖。抽象類的抽象方法可以有0到N個。大多使用于抽取相關(guān)java類中的共同方法或成員變量茴厉,然后通過繼承的方式來達(dá)到代碼復(fù)用的目的泽台。
接口是對行為的抽象,是抽象方法的集合矾缓,利用接口可以達(dá)到API定義和分類的目的怀酷。接口中任何變量都隱式聲明為public static final,任何方法都隱式聲明為public abstract而账。使用接口需要注意接口分離(Interface Segregation),畢竟接口每次改變都需要去修改對應(yīng)的實現(xiàn)類胰坟。也要盡量保持接口小粒度,畢竟不是所有實現(xiàn)類會用到接口中所有的方法。
在使用中能用接口的地方就不要使用抽象類忌怎,畢竟java是單繼承的渡处。
static和final
使用抽象類和接口的時候難免會用到static和final來修飾。
final可以用來修飾類左刽、方法和變量,分別有不同的意義。用來修飾class表示不可繼承與擴展锯茄,用來修飾變量表示不可修改,用來修飾方法表示不可重寫茶没。final對象產(chǎn)生了某種程度上的不可不(immutable)效果肌幽,但它并不等同于immutable。final只能約束對象的引用不可被賦值抓半,但是不會影響到對象的行為喂急,例如用final修飾一個List,再給list添加元素是完全正常的笛求。
static方便在沒有創(chuàng)建對象的情況下來進(jìn)行調(diào)用(方法/變量)廊移。在類被加載的時候創(chuàng)建,不可調(diào)用非靜態(tài)方法或成員變量探入,畢竟非靜態(tài)方法或變量在創(chuàng)建對象的時候才會初始化狡孔。
文章部分內(nèi)用引自極客時間上楊曉峰的《java核心技術(shù)36講》,侵權(quán)即刪蜂嗽。小伙伴們有時間可以去聽聽《java核心技術(shù)36講》這個專欄苗膝。