Java基礎教程:面向對象編程[2]
Java基礎教程:面向對象編程[2]
三大特性
封裝
封裝(英語:Encapsulation)是指一種將抽象性函式接口的實現細節部份包裝、隱藏起來的方法。封裝可以被認為是一個保護屏障,防止該類的代碼和數據被外部類定義的代碼隨機訪問。
使用封裝我們可以對成員變量進行更精確的控制,同時隱藏信息,實現細節等。
方法:
public class Person{ private String name; private int age; ? public int getAge(){ return age; } ? public String getName(){ return name; } ? public void setAge(int age){ this.age = age; } ? public void setName(String name){ this.name = name; } }
說明:
以上實例中public方法是外部類訪問該類成員變量的入口。通常情況下,這些方法被稱為getter和setter方法。因此,任何要訪問類中私有成員變量的類都要通過這些getter和setter方法。
繼承
繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父類的實例域和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。繼承符合的關系是 is-a 的關系,父類更通用,子類更具體!
方法
class 父類 { } class 子類 extends 父類 { }
說明:
子類擁有父類非private的屬性,方法
。子類可以擁有自己的屬性和方法,即子類可以對父類進行擴展。
子類可以用自己的方式實現父類的方法。
Java的繼承是單繼承,但是可以多重繼承,單繼承就是一個子類只能繼承一個父類,多重繼承就是,例如A類繼承B類,B類繼承C類,所以按照關系就是C類是B類的父類,B類是A類的父類,這是java繼承區別於C++繼承的一個特性。
提高了類之間的耦合性(繼承的缺點,耦合度高就會造成代碼之間的聯系)。
多態
多態是同一個行為具有多個不同表現形式或形態的能力。多態就是同一個接口,使用不同的實例而執行不同操作,如圖所示
方法:
public class Test { public static void main(String[] args) { show(new Cat()); // 以 Cat 對象調用 show 方法 show(new Dog()); // 以 Dog 對象調用 show 方法 Animal a = new Cat(); // 向上轉型 a.eat(); // 調用的是 Cat 的 eat Cat c = (Cat)a; // 向下轉型 c.work(); // 調用的是 Cat 的 work } public static void show(Animal a) { a.eat(); // 類型判斷 if (a instanceof Cat) { // 貓做的事情 Cat c = (Cat)a; c.work(); } else if (a instanceof Dog) { // 狗做的事情 Dog c = (Dog)a; c.work(); } } } abstract class Animal { abstract void eat(); } class Cat extends Animal { public void eat() { System.out.println("吃魚"); } public void work() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨頭"); } public void work() { System.out.println("看家"); } }
說明:
多態存在的三個必要條件:
- 繼承
- 重寫
- 父類引用指向子類對象
當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去調用子類的同名方法。
多態的好處:可以使程序有良好的擴展,並可以對所有類的對象進行通用處理。
Java基礎教程:面向對象編程[2]