註冊 登錄
Android 台灣中文網 返回首頁

jianrupan的個人空間 https://apk.tw/?1180935 [收藏] [複製] [分享] [RSS]

日誌

Java 物件導向程式設計學習

已有 472 次閱讀2013-10-15 09:41 |個人分類:軟體應用| Java

物件導向的設計方式是 Java 的核心,即使是最簡單的 Java 程式,它的寫作方式仍然是物件導向的概念。「資料」和「程式碼」是電腦程式的兩大核心。

 

類別與物件:

物件」來自於「類別Class)」。

類別定義了物件的「成員member)」,成員包含物件的屬性(物件資料)和方法(物件行為)。

利用「類別」定義的規範產生「物件」的動作稱為「實體化instantiate)」,每一個由類別產生的物件稱為該類別的「實體(instance)」

定義出一個新的類別也就是定義了一個新的資料型態。

 

物件導向的三大特性:

封裝encapsulation)、繼承inheritance)、多型polymorphism)。

 

定義類別:

類別的定義必須使用關鍵字Class來完成。

類別名稱採用「Pascal」的命名方式,第一個字母採用大寫,其餘的字元是小寫。

定義在類別中的變數或是資料稱為「實體變數(instance variable)」,或稱為「資料成員(data member)」。

定義在類別中的函式稱為「方法」,或是「成員方法」。

實體變數和方法的名稱採用「Camel」的命名方式,名稱中第一個單字都會以小寫字母表示,如果該名稱是多個單字組合而成,那第一個單字的第一個字母會採用小寫,其餘單字的第一個字母採用大寫字元。

 

建構子的使用:

物件導向的程式提供了「建構子(Constructor)」的機制,讓設計者可以在建立物件時立即初始化資料成員。

類別一定會有建構子,但如果在定義類別時,未曾同時定義建構子,則該類別在實體化時 JVM 會自動建立一個不做任何事的建構子。

 

方法多載(Method Overloading):

方法多載,又可以稱為「重載」、「覆載」,主要目的在於實現物件導向中的「多型」的精神。物件導向程式中允許同一個類別中可以定義相同名稱的方法,這種現象就是「同名異式」。

 

Class DefineClass1{               // 定義的類別

   Vehicle newCar = new Vehicle();  // 實體化一個類別

  

   newCar.wheel = 4;              // 指定實體變數的值

   newCar.setWheel(6);            // 設定 wheel

  

}

 

Class Vehicle{                 // 定義的類別

   int wheel;                  // 定義一個實體變數

  

   public void setWheel(int n){   // 定義方法

       wheel = n;

   }

  

   Public Vehicle(){            // 類別的建構子

方法多載

     wheel = 4;

   }

  

   Public Vehicle(int n){       // 定義有參數的建構子

     wheel = n;

   }

 

}

 

類別的繼承:

繼承的主要目的是在於當我們定義新類別時,可以不需要重覆的定義成員變數或是成員方法。其精神在於可以「重覆」的使用程式碼。當然,它也包含了新類別擴充性的精神。

 

Java 在繼承的機制上是採用「單一繼承」的方式,也就是說,一個類別作多只能直接繼承自另一個類別。

Java 中,如果某個類別要繼承自另一個類別,再宣告衍生類別時,需要使用「extends」關鍵字。

Java 中所有類別都是衍生自「Object」類別。所以,如果類別沒有明確的指定副類別為何,再編譯時,類別都會自動繼承 Object 類別

 

this 的使用:

this」只能在類別中使用,它是用來參考物件實體本身,也就是說:「this」儲存的是物件本身的位址。Java 程式在編譯時,會自動將類別中的成員加上「this」。

 

this( )」的「( )」中要傳入適當的參數,Compile 會根據傳入的參數型態找到適當的建構子並執行。

使用「this( )」的方式呼叫另一個建構子的語法只能使用於建構子中,不能在一般的方法中使用這樣的敘述。再則,此行敘述必須置放於建構子的第一行中

 

class Car{

  public int wheel;

}

à

class Car{

  public int this.wheel;

}

 

 

Class Car{

  protected int wheel;

  protect String name;

 

  public Car(int wheel){

    this(“No Name”);          // 呼叫另一個建構子

    this.wheel = wheel;

  }

 

  Public Car(String name){

    this.name = name;

  }

}

 

super 的使用:

this」用來參考物件實體本身,而「super」則會參考到目前類別的父類別,這裡所謂的父類別是指宣告類別時,「extends」關鍵字之後的類別。

子類別的建構式中可以利用「super( )」來呼叫父類別的建構式。如果子類別中並沒有特別指定需要呼叫父類別中的哪一個建構式時,Compiler 自動呼叫父類別的預設建構式

 

class A{

  public A()

  {

  }

}

 

class B extends A{

  public B(){

  }

}

 

à 編譯後轉為

class B extends A{

  public B{

     super();

  }

}

 

 

 

修飾字:某些修飾字可以混合使用,不在乎出現順序。

private

public

protected

存取修飾字元的有效範圍:

位置

private

無修飾字元

protected

public

同一類別

同一套件中的子類別

 

同一套件,但不是子類別

 

不同套件的子類別

 

 

不同套件,也不是子類別

 

 

 

 

 

final

程式可以在宣告時同時指定「final」變數的值,或者在第一次使用到「final」變數時指定變數的值。但 final 變數的值一但設定後,變數的值就不可以再更改了。

物件變數:程式中也不能在改變該物件變數的參考,但可以改變該物件變數所指到的資料內容。

資料成員:必須於宣告時立即指定該資料成員的值,而且無法再變更。

類別:該類別無法被繼承。

 

abstract

只可以套用餘類別以及函式上。

類別:只能用來被繼承,而且不能夠被實體化。

類別成員方法:只有名稱、參數內容和回傳型別的定義,不能有實做的部份。

和「final」相比,「abstract」類別無法被實體化而必須衍生子類別;而「final」類別可以被實體化,但無法衍生子類別。

 

static

可以套用於變數、資料成員、函式。

載入(不是實體化)時,即被配置空間。

不管該類別有幾個實體,「static」變數或函式都只有一個。

不需將類別實體化就可以直接使用。

Static initializer:只在類別被載入(不是實體化)時才會被執行,而且只執行一次。

Class Static_Test{

  Static int age = 10;

 

  Static{

    age += 1;

  }

}

 

 

native

transient

synchronized

volatile

 


路過

雞蛋

鮮花

握手

雷人

評論 (0 個評論)

facelist

您需要登錄後才可以評論 登錄 | 註冊