1. 程式人生 > >Java基礎教程:面向對象編程[2]

Java基礎教程:面向對象編程[2]

是否 info clas 必要條件 耦合 oid 保護 類成員變量 因此

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]