1. 程式人生 > >Java語言學習(六):面向物件進階

Java語言學習(六):面向物件進階

    上篇部落格中我們初步認識了Java面向物件程式設計,下面進一步學習下。

    面向物件程式設計三大特性:封裝、繼承、多型。

    封裝隱藏了類的內部實現機制,對外界而言它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。

    繼承是面向物件程式設計的基本特性之一,其基本語法為:

public class A extends B {}

    表示類A繼承了類B,其中:類A稱為子類、派生類或孩子類,類B稱為超類、基類或父類。

    重寫

是隻能應用在方法上,其註解為@Override,方法的重寫只能發生在存在繼承關係的類中,需要注意:重寫方法與原來方法簽名要相同,即方法名稱和引數要相同,包括順序。

    抽象類中可以定義抽象方法,使用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中,呼叫類的方法有兩種方式:對於靜態方法可直接使用類名呼叫,對於非靜態方法必須使用類的物件呼叫。

    當然,還有很多需要注意的地方,這裡不做補充了,大家在程式設計中遇到時注意就好了。