JAVA繼承實例

今天剛學的java繼承,然後把課後編程題的實例做一個總結

編程要求:設計一個動物聲音“模擬器”,希望模擬器可以模擬許多動物的叫聲,要求如下。

·編寫抽象類Animal

Animal抽象類有兩個抽象法cry()和getAnimalName(),即要求各種具體的動物給出自己的叫聲和種類名稱。

·編寫模擬器類Simulator

該類有一個playSound(Animal animal)方法,該方法的參數是Animal類型。即參數animal可以調用Animal的子類重寫的cry()方法播放具體動物的聲音,調用子類重寫的getAnimalName()方法顯示動物種類的名稱。

·編寫Animal類的子類:Dog類和Cat類

UML圖略

·編寫主類Application的main方法中至少包含如下代碼:

Simulator simulator=new Simulator();

simulator.playSound(new Dog());

simulator.playSound(new Cat());

在編程之前首先要理清思路,對於初學者來說,這些都是簡單的編程,而給出了許多提示。這就更便於我們進行程序設計。由於UML圖沒法在設計器裏面畫出來,這裏就省略了。

首先,有五個類,Simulator,Animal,Dog,Cat和主類Application.而Simulator依賴於Animal類,Dog類和Cat類是Animal的子類。

根據要求依次設計類,首先我們編寫Animal類,代碼如下。

public abstract class Animal { //根據要求聲明抽象類使用abstract關鍵字
	public abstract void cry();  
	public abstract String getAnimalName();
}

然後編寫模擬器類Simulator

public  class Simulator  {
	public void playSound(Animal animal){
	System.out.println(animal.getAnimalName()+"的叫聲是:");
		animal.cry();	
		}
	}

編寫Animal類的子類:Dog類和Cat

public   class Dog extends Animal { //要求各種動物給出自己的名字和叫聲
	String name="小白";             //故需要聲明名字name和叫聲cry()方法
	public String getAnimalName() {
		 System.out.println("我的名字是:"+name);
		  return name;
	}
	public void cry() {
		System.out.println("汪汪......");
		
	}
	
}
public  class Cat extends Animal { //Cat和Dog類一樣,都是繼承Animal父類,使用關鍵字extends
	String name="小咪";
	public String getAnimalName() {
		 System.out.println("我的名字是:"+name);
		  return name;
		  }
	public void cry() {
		System.out.println("喵貓......");
		
	}
	}

最後我們需要編寫主類Application

public class Application {
	public static void main(String[] args) {
	Simulator simulator=new Simulator ();
	simulator.playSound(new Dog());
	simulator.playSound(new Cat());     //Animal animal =new Dog(); 
                                       //simulator.playSound(animal);
//上面兩行代碼等價於右邊4行代碼          //Animal animal=new Cat();
	                                  //simulator.playSound(animal);
	}
 
}

我們用cmd來運行編寫的代碼(環境已經配置好,如果不會配置java環境參考小編的Java環境配置文章)。

這是最後運行成功的結果,這樣小貓和小狗的名字和叫聲就能輸出了。

 

最後做一下總結:雖然這是一個小實例,但是也側面反映了開-閉原則。所謂開閉原則,就是爲了便於維護系統,而不用修改核心代碼。比如這個例子來說。我們這裏輸出的小貓和小狗,如果我們想要輸入小兔,就不用修改Animal類,直接像Cat類和Dog類一樣進行繼承和聲明即可。這樣便於我們後期的維護。

然後就是體現的繼承和多態。這也是java的三大特點中的兩種。通過繼承,可以擁有父類的部分變量和方法,而多態,就是通過重寫繼承的方法來實現多種行爲。例如繼承的Animal,getAnimalName()方法可以擁有不同的名字,以及其它的行爲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章