對封裝、抽象、繼承、多型的理解?(java四大特性)
阿新 • • 發佈:2019-01-31
封裝是把過程和資料包圍起來,對資料的訪問只能通過自定義的介面,這個可以保護裡面的資料和結構不被修改。
繼承是實現程式碼複用的重要手段,Java的繼承具有單繼承的特點,每一個子類只允許有一個父類。通過繼承子類就可以擁有父類的部分屬性(私有屬性除外)。
抽象是概念上的同一事物的共有屬性或者方法的集合,比如抽象出一個人類,車類。抽象可以說是多型的基礎。
多型是程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而在程式執行時才能具體知道變數指向哪一個類,該引用變數的方法具體指向哪個類中的方法。因為在程式執行時才能確定具體的類,這樣不用修改源程式程式碼,就可以讓引用繫結到各種不同類實現上,從而導致該引用呼叫的具體方法隨之改變,即不修改程式程式碼就可以改變程式執行時所繫結的具體程式碼,讓程式可以選擇多個執行狀態,這就是多型。(需要擴充套件瞭解一下)
下面我舉一個栗子,闡述一下我的理解,比如現在定義了一個Person類,這只是一個抽象類
public abstract class Person{
public abstract void goWC();
}
現在這個抽象類只是把人去廁所這個抽象方法提了出來,但是抽象是沒有用的,我們需要給他具體的實現,當今世界上只有兩個性別,男人,女人,好像現在不能這麼說了,那就是搞三個性別吧,男人,女人,人妖。hhh,我們來進行具體實現
public class Man extends Person { @Override public void goWc() { System.out.println("sit up"); } } public class Woman extends Person{ @Override public void goWc() { System.out.println("sit down"); } } public class Yao extends Person { @Override public void goWc() { System.out.println("這是一個謎"); } }
讓我們來看一下結果吧!
public static void main(String[] args) {
ArrayList<Person> list=new ArrayList<Person>();
list.add(new Man());
list.add(new Woman());
list.add(new Yao());
for (Person person : list) {
person.goWc();
}
}
執行結果:
sit up
sit down
這是一個謎
是不是很清真,也驗證了不修改程式程式碼就可以改變程式執行時所繫結的具體程式碼,讓程式可以選擇多個執行狀態這個特性,上面還有抽象繼承的思想在裡面,用一個栗子解決三大特性。