第三堂 Java 語法 (2) 物件導向程式設計

34
第三堂: 學習 Java 語法 (2) 物件導向程式設計 柯力中 Jason Ko JasonAndroid 快樂應用程式學習班
  • Upload

    -
  • Category

    Software

  • view

    442
  • download

    0

Transcript of 第三堂 Java 語法 (2) 物件導向程式設計

Page 1: 第三堂  Java 語法 (2) 物件導向程式設計

第三堂:學習 Java 語法 (2)

物件導向程式設計

柯力中 Jason Ko

Jason的Android 快樂應用程式學習班

Page 2: 第三堂  Java 語法 (2) 物件導向程式設計

課程內容

1. 物件

2. 物件的繼承

3. (繼承的)多型

4. 抽象 Abstract class 與 method

5. 介面 Interface

Page 3: 第三堂  Java 語法 (2) 物件導向程式設計

物件

Jason的Android 快樂應用程式學習班

Page 4: 第三堂  Java 語法 (2) 物件導向程式設計

物件導向程式設計

Jason的Android 快樂應用程式學習班

• 我們生活在一個以物件理解的世界 ex. 一個人, 兩

條狗, 一個電鍋…等(人.狗.電鍋都是物件的概念)

• class 是物件的模板, 分為型態與行為兩部分

• 型態 => instance variable

• 行為(方法) => method(.java 檔)

class

variable

method

Page 5: 第三堂  Java 語法 (2) 物件導向程式設計

物件範例— Dog class

Dog

型態:

instance variable

行為:

method

String name;

int legs;

bark();

run();

Page 6: 第三堂  Java 語法 (2) 物件導向程式設計

物件練習— Person class

Person

型態:

instance variable

行為:

method

String name;

int fingers;

int foots;

run();

jump();

speak();

Page 7: 第三堂  Java 語法 (2) 物件導向程式設計

物件

Page 8: 第三堂  Java 語法 (2) 物件導向程式設計

使用物件

輸出結果

Page 9: 第三堂  Java 語法 (2) 物件導向程式設計

小試身手:物件實作

Jason的Android 快樂應用程式學習班

1. 請依照以下規格做出 Dog 跟 Cat

class

Dog

String name;

int legs;

eat();

sleep();

Cat

String name;

int legs;

eat();

sleep();

Page 10: 第三堂  Java 語法 (2) 物件導向程式設計

繼承

Jason的Android 快樂應用程式學習班

Page 11: 第三堂  Java 語法 (2) 物件導向程式設計

繼承(inheritance)

Jason的Android 快樂應用程式學習班

• 當有許多相似物件時, 要一個個寫就顯得費事,

可以透過物件的繼承減少重複的程式

Dog Cat

Animal

bark();

run();

Page 12: 第三堂  Java 語法 (2) 物件導向程式設計

繼承的方法

Jason的Android 快樂應用程式學習班

繼承自... 母 class

Page 13: 第三堂  Java 語法 (2) 物件導向程式設計

繼承實作 part 1: Animal class

Jason的Android 快樂應用程式學習班

Page 14: 第三堂  Java 語法 (2) 物件導向程式設計

Jason的Android 快樂應用程式學習班

繼承實作 part 2 : Dog class 和 Cat class

Page 15: 第三堂  Java 語法 (2) 物件導向程式設計

繼承注意事項

• 如果有相同方法, 子類別(物件)會覆蓋父類別(物件)

• 使用 super 呼叫父類別成員變數或方法

Jason的Android 快樂應用程式學習班

Page 16: 第三堂  Java 語法 (2) 物件導向程式設計

繼承練習

Jason的Android 快樂應用程式學習班

題目:動物家族 cat, dog, bird 都會 eat() 跟 sleep(),

此外 cat 會 mew(), dog 會 bark(), bird 會 fly(),

請依此設定建構出 Animal, Cat, Dog, Bird 的classes

Page 17: 第三堂  Java 語法 (2) 物件導向程式設計

猜猜看

• Animal 有 eat(), Cat 有 eat(), 那程式會

呼叫哪一個 ?

Animal

Cateat();

eat();

Page 18: 第三堂  Java 語法 (2) 物件導向程式設計

多型• 多型就是意味著物件有多種型式, 看你是

指到了哪個物件

Animal

Cateat();

eat();

Page 19: 第三堂  Java 語法 (2) 物件導向程式設計

強制型別轉換

Animal mCat = new Cat();

請問這樣可以嗎?

Jason的Android 快樂應用程式學習班

這樣呢?

mCat.mew();

可以

不可以, Animal 沒有此方法

要這樣, 型別轉換

Cat theCat = (Cat) mCat;

theCat.mew();

Page 20: 第三堂  Java 語法 (2) 物件導向程式設計

強制型別轉換說明

Jason的Android 快樂應用程式學習班

Animal

Cat

mCat

(Cat)theCatHeap 記憶體空間

mCat 只指向 Animal 物件, theCat 指向 Cat 物件

Page 21: 第三堂  Java 語法 (2) 物件導向程式設計

檢查物件

• 要檢查物件, 用 isinstanceof

if (o isinstance of Dog) {

Dog d = (Dog) o;

}

Page 22: 第三堂  Java 語法 (2) 物件導向程式設計

程序開發 V.S 物件導向

Jason的Android 快樂應用程式學習班

Page 23: 第三堂  Java 語法 (2) 物件導向程式設計

程序開發 V.S 物件導向

題目:請告訴我 Cat, Dog, Bird 的特殊技能?

(用程式寫出來)

答:Cat 會 mew(); Dog 會 Bark(); Bird 會 fly();

程式請接下頁分曉~

Page 24: 第三堂  Java 語法 (2) 物件導向程式設計

程序開發 V.S 物件導向

程序開發int x; // x= 1 表示 Cat, 2 表示 Dog, 3 表示Bird

if (x == 1 ){

System.out.println(“喵喵喵”);

}else if( x == 2){

System.out.println(“旺旺”);

}else{

System.out.println(“飛飛”);

}

再來兩個動物, 就會記不住代號了!程式也會很長 ~

Page 25: 第三堂  Java 語法 (2) 物件導向程式設計

程序開發 V.S 物件導向

物件導向 Cat mCat = new Cat();

mCat.mew();

Dog mDog = new Dog();

mDog.bark();

Bird mBird = new Bird();

mBird.fly();

呼叫動物(物件)本身的方法就好了!

再來兩個動物, 也不怕 ~ 科科~

Page 26: 第三堂  Java 語法 (2) 物件導向程式設計

抽象類別與介面

Jason的Android 快樂應用程式學習班

Page 27: 第三堂  Java 語法 (2) 物件導向程式設計

• 有些 class 我們希望只是抽象概念, 不希望被實作時, 使用抽象類

• 實作時, 只要在 class 前加上 abstract就行了

• 換句話說, 抽象類別不能 new 物件

抽象類別 Abstract Class

Jason的Android 快樂應用程式學習班

Page 28: 第三堂  Java 語法 (2) 物件導向程式設計

抽象 method

• 所有的抽象方法都必須實作

• 用意是確保每個子類別都有這個 method

則子類必須實作 watch() 方法

Page 29: 第三堂  Java 語法 (2) 物件導向程式設計

抽象class 與 method實作

Jason的Android 快樂應用程式學習班

Abstract 的method必須實作

Page 30: 第三堂  Java 語法 (2) 物件導向程式設計

介面 Interface 的使用時機

Jason的Android 快樂應用程式學習班

問 :

如果想給 Cat 跟 Dog 加上寵物的動作, 例如

walkWithHost(), kissHost(), 但 Bird 不想加上此

動作, 我們應該怎麼做?

答:

實作一個 Interface IPetting, 將 walkWithHost() 跟

kissHost() 寫入其中, 再由 Cat 跟 Dog 來

implement

Page 31: 第三堂  Java 語法 (2) 物件導向程式設計

• class 除了繼承之外, 還可以實作介面, 方法

為:

介面 Interface 的使用方法

Jason的Android 快樂應用程式學習班

class Cat extends Animal implements IPetting

使用 interface

的意思所使用 interface

的名稱

Page 32: 第三堂  Java 語法 (2) 物件導向程式設計

介面 Interface 實作

Jason的Android 快樂應用程式學習班

Page 33: 第三堂  Java 語法 (2) 物件導向程式設計

• 因為 Java 不支援多重繼承, 要達到同時繼承多個父類別變數

或方法時, 我們會採用 implement 多個 Interface 的方法

• interface 可以當作是 100% 的 abstract class, interface 裏的

方法都需要實作

• Interface 可以 extends Interface

( interface 繼承 interface )

• Interface 的變數是 public final static

Interface 介面

Jason的Android 快樂應用程式學習班

Page 34: 第三堂  Java 語法 (2) 物件導向程式設計

參考1. 深入淺出 Java 程式設計

http://www.books.com.tw/products/00103118

83

2. 最新 Java 7 程式語言

http://www.books.com.tw/products/00105883

25

Jason的Android 快樂應用程式學習班