java三大特性——封裝,繼承,多型
1、封裝
使用封裝有三大好處:
1、良好的封裝能夠減少耦合。
2、類內部的結構可以自由修改。
3、可以對成員進行更精確的控制。
4、隱藏資訊,實現細節。
5、封裝我們也能夠對物件的出口做出很好的控制,訪問入口做一些控制
如對實體類進行屬性封裝方法:setter()和getter()
2、繼承
同時在使用繼承時需要記住三句話:
1、子類擁有父類非private的屬性和方法。
2、子類可以擁有自己屬性和方法,即子類可以對父類進行擴充套件。
3、子類可以用自己的方式實現父類的方法。
對於繼承而言,子類會預設呼叫父類的構造器,但是如果沒有預設的父類構造器,子類必須要顯示的指定父類的構造器,而且必須是在子類構造器中做的第一件事(第一行程式碼)。
對於protected而言,它指明就類使用者而言,他是private,但是對於任何繼承與此類的子類而言或者其他任何位於同一個包的類而言,他卻是可以訪問的
public class Person { protected String name; protected int age; protected String sex; Person(String name){ System.out.println("Person Constrctor-----" + name); } } public class Husband extends Person{ private Wife wife; Husband(){ super("chenssy"); System.out.println("Husband Constructor..."); } public static void main(String[] args) { Husband husband = new Husband(); } }
首先我們需要明確,繼承存在如下缺陷:
1、父類變,子類就必須變。
2、繼承破壞了封裝,對於父類而言,它的實現細節對與子類來說都是透明的。
3、繼承是一種強耦合關係。
如果必須向上轉型,則繼承是必要的,但是如果不需要,則應當好好考慮自己是否需要繼承。
3、多型
即不修改程式程式碼就可以改變程式執行時所繫結的具體程式碼,讓程式可以選擇多個執行狀態,這就是多型性
多型的前提條件有三個:
- 子類繼承父類
- 子類覆蓋父類的方法
- 父類引用指向子類物件
多型與向下轉型
向下轉型是指將父類引用強轉為子類型別;這是不安全的,因為有的時候,父類引用指向的是父類物件,向下轉型就會丟擲ClassCastException,表示型別轉換失敗;但如果父類引用指向的是子類物件,那麼向下轉型就是成功的。
public class Wangxiaosi extends Wangsi {
public void write() {
System.out.println("記住仇恨,表明我們要奮發圖強的心智");
}
public void eat() {
System.out.println("我不喜歡讀書,我就喜歡吃");
}
public static void main(String[] args) {
Wangsi[] wangsis = { new Wangsi(), new Wangxiaosi() };
// wangsis[1]能夠向下轉型
((Wangxiaosi) wangsis[1]).write();
// wangsis[0]不能向下轉型
((Wangxiaosi)wangsis[0]).write();
}
}
class Wangsi {
public void write() {
System.out.println("勿忘國恥");
}
public void read() {
System.out.println("每週讀一本好書");
}
}