做一個飼養員給動物喂食物的例子體現JAVA中的麵向對象思想,接口(抽象類)的用處
做一個飼養員給動物喂食物的例子體現JAVA中的麵向對象思想,接口(抽象類)的用處
interface Animal{ //動物的接口
public void eat(Food food); //接口中隻有抽象的方法和靜態常量!這裏void前麵省略了abstract。同樣,變量可以省略static final
}
public void eat(Food food); //接口中隻有抽象的方法和靜態常量!這裏void前麵省略了abstract。同樣,變量可以省略static final
}
class Cat implements Animal //一種動物類:貓
{
public void eat(Food food) //這裏是對上麵的接口中已經有的方法進行了覆蓋也叫重寫,這一步是必須的!
{
System.out.println("小貓吃"+food.getName());
}
}
{
public void eat(Food food) //這裏是對上麵的接口中已經有的方法進行了覆蓋也叫重寫,這一步是必須的!
{
System.out.println("小貓吃"+food.getName());
}
}
class Dog implements Animal //一種動物類:狗
{
public void eat(Food food) //覆蓋
{
System.out.println("小狗啃"+food.getName());
}
}
{
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;
}
}
{
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;
}
}
{
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 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); //給貓喂魚
}
}
{
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);
}
支持單繼承,即隻能繼承一個父類,而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());
}
}
{
public void eat(Food food)
{
System.out.println("小貓吃"+food.getName());
}
}
class Dog extends Animal
{
public void eat(Food food)
{
System.out.println("小狗啃"+food.getName());
}
}
{
public void eat(Food food)
{
System.out.println("小狗啃"+food.getName());
}
}
最後更新:2017-04-04 07:03:36