顯示具有 多型 標籤的文章。 顯示所有文章
顯示具有 多型 標籤的文章。 顯示所有文章

2010年6月28日 星期一

JAVA筆記-Overriding覆寫和Overloading多載

英文長得很像,常常不小心搞混

Overloading
多載,在相同類別中,定義名稱相同,但引數個數不同或引數型態不同的函式

Overriding
覆寫,子類別繼承父類別,但是改寫父類別的方法,方法的名稱、引數和型態都必須相同
##ShowAll##

2009年12月22日 星期二

JAVA筆記-多個繼承時,使用型別轉換要注意

進行物件型別轉換時,多個繼承容易撰寫錯誤,
未避免執行風險,加上instanceof判斷式

class Animal extends Organism{...}
class Mammalian extends Animal{...}
Animal animal = null;
if(new Mammalian() instanceof Animal){
  animal = (Animal)new Mammalian();
}
##ShowAll##

2009年12月9日 星期三

JAVA筆記-instanceof多型使用方法

用不同型別的宣告,建立繼承物件的實體,
使用的是實做物件的函式與屬性
##ReadMore##
/******************
Animal: move()
Bird: move()
Cat: move()、skill()
Tiger: skill()
Bird、Cat繼承Animal
Tiger繼承Cat
*******************/

class Animal {
  public void move() {
    System.out.println("移動...");
  }
}
class Cat extends Animal {
  public void move() {
    System.out.println("跑跑跳跳...");
  }
  public void skill() {
    System.out.println("洗澡...");
  }
}
class Bird extends Animal {
  public void move() {
    System.out.println("蹦蹦飛飛...");
  }
}
class Tiger extends Cat {
  public void skill() {
    System.out.println("守獵...");
  }
}

public class Zoo {
  public static void main(String[] args) {

    //ex1
    Tiger a = new Tiger();
    t.skill; //呼叫Tiger的method
    t.move; //呼叫Tiger的method

    //ex2
    Cat c = new Tiger();
    c.skill; //呼叫Tiger的method
    c.move; //呼叫Tiger的method

    //ex3
    Animal a = new Tiger();
    a.move; //呼叫Tiger的method
    a.skill; //編譯錯誤
    //Animal型別沒有skill(),無法使用Tiger的函式

    /*********************
    //ex4
    Animal a = new Tiger();
    ((Tiger)a).skill; //呼叫Tiger的method
    ((Brid)a).move; //編譯正確
    //但是Tiger並不是繼承Brid,執行時會錯誤
    //必須加上條件式if(a instanceof Brid),傳回false則代表不可轉型
    //instanceof是用來判斷某個類別是否實作了某個介面
    *********************/
  }
}
  
/