增強安全性和簡化程式設計,使用者不必了解具體的實現細節。
隱藏物件的屬性和實現細節,僅對外公開介面來對程式中屬性的讀和修改。
封裝的基本做法: 把所有的屬性私有化,對每個屬性提供getter和setter方法,在開發的時候經常要對已經編寫的類進行測試,所以有的時候還需重寫tostring方法。
用extends關鍵字實現繼承,主要利於**的復用。
繼承而得到的類稱為子類,被繼承的類稱為父類。子類是父類的擴充套件,獲得父類的全部屬性和方法,除了父類中構造方法和private的成員變數和方法。乙個類若無指定父類則預設繼承於object。
父類普通方法:使用override重寫,若是抽象方法,子類必須全部實現他們,否則就得宣告自己為抽象類。
父類構造方法:這個是不能繼承的,其實它是被子類構造方法隱士呼叫的。生成子類物件時,會預設先呼叫父類不帶引數的構造方法生成父類物件(若無就在子類構造方法中用super顯示呼叫有參構造方法),再呼叫子類構造方法才生成子類物件。
只能單繼承,因為如果繼承了a和b,若他們有同名的方法你就不知道要呼叫哪乙個了,但我們可以使用介面實現多重繼承,因為介面裡面的方法都是抽象的,沒有實現,所以隨便調哪個都無所謂了。
inte***ce
a{}inte***ce
b{}inte***ce
cextends
a,b{}
class
c1implements
c{}
在程式中定義的某個引用變數具體所指向的型別和呼叫的方法在編碼時並不能確定,而只有在執行的時候才能確定。這樣能遮蔽不同子類物件之間的差異,寫出通用的**以適應需求的不斷變化。
這樣才會呼叫子類中的方法,若不是重寫的方法,就會向上找,優先順序如下:(重點)
this.x(obj)—>super.x(obj)—>this.x(super(obj))—>super.x(super(obj))
想必大家對此還比較模糊吧,說個例子就行了。
class
a
public string show(a obj)
}
class
bextends
a public string show(a obj)
} class
cextends
b{}
class
dextends
b{}
題目 a a1 = new a();
a a2 = new b();
b b = new b();
c c = new c();
d d = new d();
system.out.println(a2.show(b)); ④
system.out.println(a2.show(c)); ⑤
system.out.println(a2.show(d)); ⑥
system.out.println(b.show(b)); ⑦
system.out.println(b.show(c)); ⑧
system.out.println(b.show(d)); ⑨
答案④ b and a
⑤ b and a
⑥ a and d
⑦ b and b
⑧ b and b
⑨ a and d
我就出了了幾個繞一點的,a2.show(b),因為a2是父類引用指向子類的,按剛才說的優先順序來解釋,這裡this代表a,先this.show(b)沒有這個方法,則super.show(b),a沒有父類,則this.show(super(b)),有了,於是輸出a and a,一看不對,其實是這樣的,我前面加粗了一句話,再仔細品味下吧,這裡父類有的方法子類重寫了,所以我得呼叫b的show(a),輸出b and a Java三大特性 封裝,繼承,多型
封裝的作用 1 封裝能夠減少耦合 2 類內部結構可以自由修改 3 對成員變數進行更精確的控制 例項 public class person在上面這段 中,把屬性定義成private私有的,只能在本類中訪問,其他類訪問不了。public class person public string getna...
java三大特性 封裝,繼承,多型
使用封裝有三大好處 1 良好的封裝能夠減少耦合。2 類內部的結構可以自由修改。3 可以對成員進行更精確的控制。4 隱藏資訊,實現細節。5 封裝我們也能夠對物件的出口做出很好的控制,訪問入口做一些控制 如對實體類進行屬性封裝方法 setter 和getter 同時在使用繼承時需要記住三句話 1 子類擁...
三大特性 封裝,繼承,多型
重寫方法的規則 1 引數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是過載。2 返回的型別必須一直與被重寫的方法的返回型別相同,否則不能稱其為重寫而是過載。3 訪問修飾符的限制一定要大於被重寫方法的訪問修飾符 public protected default private 4 重寫方法一定...