閱讀655 返回首頁    go 阿裏雲 go 技術社區[雲棲]


做一個飼養員給動物喂食物的例子體現JAVA中的麵向對象思想,接口(抽象類)的用處

做一個飼養員給動物喂食物的例子體現JAVA中的麵向對象思想,接口(抽象類)的用處

interface Animal{             //動物的接口
    public void eat(Food food); //接口中隻有抽象的方法和靜態常量!這裏void前麵省略了abstract。同樣,變量可以省略static final
}
class Cat implements Animal //一種動物類:貓 

    public void eat(Food food) //這裏是對上麵的接口中已經有的方法進行了覆蓋也叫重寫,這一步是必須的!
    { 
      System.out.println("小貓吃"+food.getName()); 
    } 
}
class Dog implements Animal //一種動物類:狗 

    public void eat(Food food) //覆蓋
    { 
      System.out.println("小狗啃"+food.getName()); 
    } 
}
abstract class Food //食物抽象類 。抽象類不能創建對象,這和C++一樣 

    protected String name; 
    public String getName() { 
      return name; 
    } 
    public void setName(String name) { 
      this.name = name; 
    } 
}
class Fish extends Food //一種食物類:魚,繼承了Food類

   public Fish(String name) {   //構造函數
      this.name = name; 
    } 
}

class Bone extends Food //一種食物類:骨頭,繼承了Food類
{  
   public Bone(String name) {    //構造函數
      this.name = name; 
    } 
}
class Feeder //飼養員類 ,這是個很一般的類。。。
{  
    public void feed(Animal animal,Food food) //飼養員給某種動物喂某種食物 
    { 
      animal.eat(food); 
    } 
}
public class TestFeeder //測試飼養員給動物喂食物 

    public static void main(String[] args) {    //這裏順便說下,隻有在public類中才有main函數!一個這樣的程序中也隻有一個public類!
      Feeder feeder=new Feeder(); 
      Animal animal=new Dog();     //animal引用Dog類對象
      Food food=new Bone("肉骨頭"); //這裏創建父類引用子類對象,用food引用Bone對象
      feeder.feed(animal,food); //給狗喂肉骨頭 
      animal=new Cat(); //這裏又將animal引用Cat類的對象
      food=new Fish("魚"); //同樣,用food引用Fish類對象,這和上麵一樣,充分體現了food和 animal隻是兩個方便引用的名稱,是通過這兩個名稱來引用對象的
      feeder.feed(animal,food); //給貓喂魚 
    } 
}
/*接口和繼承有什麼相似和不同,我隻是模煳的了解一些,卻說不太出來,也希望老師在講解這部分的時候能詳細些。至於java中的繼承和C++的繼承一比較,會發現JAVA隻
支持單繼承,即隻能繼承一個父類,而c++卻能繼承多個父類!但通過接口,java可以實現多個接口,接口也可以繼承接口。

ps:將上麵的題目接口的部分改成繼承也是可以的,很容易。。。如下
abstract class Animal{             
    public abstract void eat(Food food); 
}
class Cat extends Animal 

    public void eat(Food food) 
    { 
      System.out.println("小貓吃"+food.getName()); 
    } 
}
class Dog extends Animal 

    public void eat(Food food) 
    { 
      System.out.println("小狗啃"+food.getName()); 
    } 
}

最後更新:2017-04-04 07:03:36

  上一篇:go poj 3687 Labeling Balls 逆向拓撲
  下一篇:go CodeIgniter框架模型(model),視圖(view)和控製器(controller)中的文件操作