Java語言學習(六):面向物件進階
上篇部落格中我們初步認識了Java面向物件程式設計,下面進一步學習下。
面向物件程式設計三大特性:封裝、繼承、多型。
封裝隱藏了類的內部實現機制,對外界而言它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。
繼承是面向物件程式設計的基本特性之一,其基本語法為:
public class A extends B {}
表示類A繼承了類B,其中:類A稱為子類、派生類或孩子類,類B稱為超類、基類或父類。
重寫
抽象類中可以定義抽象方法,使用abstract修飾,也可以定義普通方法,包含抽象方法的類必須是抽象類,而抽象類不是必須包含抽象方法。對於抽象方法來說,僅定義一個宣告即可,即抽象方法無方法體。抽象類的簡單宣告為:
pubic abstract class A {}
抽象方法的簡單宣告為:
public abstract int getA();//無方法體
注意:抽象類是不能直接例項化的,如果要獲得該類的例項可以使用靜態方法建立其實現類物件。
多型是面向物件程式設計的基本特性之一,Java的多型主要是通過重寫父類(或介面)中的方法來實現的,好處是可以遮蔽物件之間的差異,從而增強了軟體的擴充套件性和重用性。
下面通過一個例項來說明下上面所說的特性:
(1)任務:通過例項進一步熟悉封裝、繼承、重寫、抽象、多型等的使用
(2)準備工作:瞭解封裝、繼承、重寫、抽象、多型
(3)程式設計:
定義父類Car:
public abstract class Car { public abstract String getInfo(); }
定義子類BMW,繼承類Car:
public class BMW extends Car{
//重寫父類的方法
@Override
public String getInfo() {
return "BMW";
}
}
定義子類Benz,繼承類Car:
public class Benz extends Car{
//重寫父類的方法
@Override
public String getInfo() {
return "Benz";
}
}
定義類CarFactory,並定義靜態方法,通過指定車型建立物件(簡單工廠模式的應用):
public class CarFactory {
public static Car getCar(String name){
if(name.equalsIgnoreCase("BMW"))
return new BMW();
else if(name.equalsIgnoreCase("Benz"))
return new Benz();
else
return null;
}
}
定義測試類TestCar:
public class TestCar {
public static void main(String[] args) {
Car bmwCar = CarFactory.getCar("BMW");
System.out.println("車型為:"+bmwCar.getInfo());
Car benzCar = CarFactory.getCar("Benz");
System.out.println("車型為:"+benzCar.getInfo());
}
}
(4)執行:輸出相應物件資訊
上面的例項應用到了工廠模式,也有其他的一些模式,比如:策略模式、介面卡模式等,這裡不做闡述了,自行學習下吧。
在類中,除了可以定義域、方法和塊,還可以定義類,這種類稱為內部類,其簡單的宣告語法為:
public class Outter{
class Inner{}
}
內部類可以使用外部類中定義的屬性和方法,即使為私有的。它可以分為普通內部類、區域性內部類(將類定義在方法的內部)、匿名內部類、靜態內部類(使用static修飾的內部類),具體的使用不做詳述了。
在Java中,呼叫類的方法有兩種方式:對於靜態方法可直接使用類名呼叫,對於非靜態方法必須使用類的物件呼叫。
當然,還有很多需要注意的地方,這裡不做補充了,大家在程式設計中遇到時注意就好了。