1. 程式人生 > >Java三大特性總結

Java三大特性總結

一、繼承:

一個類繼承另一個類,則繼承的類為子類,被繼承的類為父類。它的目的就是實現程式碼的複用。子類繼承父類後就自動擁有了父類的屬性和方法,但是,父類的私有屬性和構造方法並不能被繼承。另外,繼承後子類還可以寫自己特有的屬性和方法,目的是實現功能的擴充套件,子類也可以複寫父類的方法,即方法的重寫。

示例:

// A.java
public class A {
    private int i;
    protected int j;

    public void func() {

    }
}

// B.java
public class B extends A {
}

二、多型:

多型的概念是以封裝和繼承為基礎發展出來的。
概念:相同的事物,呼叫其相同的方法,引數也相同時,但表現的行為卻不同。
理解:所謂多型就是指程式中定義的引用變數所指向的具體型別和通過該引用變數發出的方法呼叫在程式設計時並不確定,而是在執行期間才能確定,即一個引用變數倒底會指向哪個類的例項物件,該引用變數發出的方法呼叫到底是哪個類中實現的方法,必須在由程式執行期間才能決定。因為在程式執行時才確定具體的類,這樣,不用修改源程式程式碼,就可以讓引用變數繫結到各種不同的類實現上,從而導致該引用呼叫的具體方法隨之改變,即不修改程式程式碼就可以改變程式執行時所繫結的具體程式碼,讓程式可以選擇多個執行狀態,這就是多型性。
用一個例子來進行理解:
比如說你是一個比如你是一個酒神,對酒情有獨鍾。某日回家發現桌上有幾個杯子裡面都裝了白酒,從外面看我們是不可能知道這是些什麼酒,只有喝了之後才能夠猜出來是何種酒。你一喝,這是劍南春、再喝這是五糧液、再喝這是酒鬼酒….在這裡我們可以描述成如下:
酒 a = 劍南春
酒 b = 五糧液
酒 c = 酒鬼酒
……
這裡所表現出來的就是多型。劍南春、五糧液、酒鬼酒都是酒的子類,我們只是通過酒這一個父類就能夠引用不同的子類,這就是多型——我們只有在執行的時候才會知道引用變數所指向的具體例項物件。
誠然,要理解多型我們就必須要明白什麼是“向上轉型”。在繼承中我們簡單介紹了向上轉型,這裡就在囉嗦下:在上面的喝酒例子中,酒(Win)是父類,劍南春(JNC)、五糧液(WLY)、酒鬼酒(JGJ)是子類。我們定義如下程式碼:

JNC a = new JNC( ) ;

對於這個程式碼我們非常容易理解無非就是例項化了一個劍南春的物件嘛!但是這樣呢?

  Wine a = new JNC();

在這裡我們這樣理解,這裡定義了一個Wine 型別的a,它指向JNC物件例項。由於JNC是繼承與Wine,所以JNC可以自動向上轉型為Wine,所以a是可以指向JNC例項物件的。這樣做存在一個非常大的好處,在繼承中我們知道子類是父類的擴充套件,它可以提供比父類更加強大的功能,如果我們定義了一個指向子類的父類引用型別,那麼它除了能夠引用父類的共性外,還可以使用子類強大的功能。
但是向上轉型存在一些缺憾,那就是它必定會導致一些方法和屬性的丟失,而導致我們不能夠獲取它們。所以父類型別的引用可以呼叫父類中定義的所有屬性和方法,對於只存在與子類中的方法和屬性它就望塵莫及了—1。
eg:

public class Wine{
        public void fun1(){
            System.out.println(“Wine 的fun1”);
        }
        public void fun2(){
            System.out.println(“fun2”);
        }
}
public class JNC extends Wine {
/*
子類過載父類方法,但是在父類中不存在該方法,向上轉型後,父類是不能引用該方法的
*/
public void fun1(String str){
    System.out.println(“JNC 的 fun1”);
    fun2();
}   
/*
    子類重寫父類方法,指向子類的父類引用呼叫fun2時,必定呼叫該方法
*/
public void fun2(){
 System.out.println("JNC 的Fun2...");  
}
}
public class Test {
        public static void main(String[] args){
            Wine a = new JNC();
            a.fun1();
        }
}

output: 
Wine 的fun1
JNC 的Fun2

三、封裝:

首先,屬性可用來描述同一類事物的特徵,方法可描述一類事物可做的操作。封裝就是把屬於同一類事物的共性(包括屬性和方法)歸到一類中,以方便使用。封裝是隱藏類的內部實現機制,可以在不影響使用的情況下,改變類的內部結構,同時也保護了資料。且對外部只保留一些對外介面使之與外部發生聯絡。系統的其他部分之一通過這些介面與之進行互動。也就是說,使用者不需要知道物件內部方法的實現細節,但可以根據物件提供的外部介面(物件名和引數)來訪問引數。

public class StuInfo{

   private String name;
   private String idNum;
   private int age;

   public int getAge(){
      return age;
   }

   public String getName(){
      return name;
   }

   public String getIdNum(){
      return idNum;
   }

   public void setAge( int newAge){
      age = newAge;
   }

   public void setName(String newName){
      name = newName;
   }

   public void setIdNum( String newId){
      idNum = newId;
   }
}