JAVA基礎—05.面向對象&多態

愛轉圈筆記

勤思、體悟、總結、分享

面向對象——多態

多態

多態的意義

  • 父類對象子類創建(父類類型指向子類對象)
  • 同一行爲,不同對象表現不一樣(類似方法重寫)

多態的實現方式

  • 父類類型作爲方法形參,實際傳入子類對象;
  • 父類類型作爲方法返回值,實際返回子類對象;
public class Test{
	public static void main(String[] args){
		//聲明瞭一個Animal類型的dog
		Animal dog = new Dog();
		//聲明瞭一個Animal類型的cat
		Animal cat = new Cat();
		
		//實參傳入子類對象
		test1(dog).eat("大骨頭");
		test1(cat).eat("鹹魚");
		
		/*輸出結果:
		狗狗1吃了大骨頭
		貓貓吃了鹹魚*/
	}
	//父類類型作爲形參和返回值
	public static Animal test1(Animal animal){
		return animal;
	}	
}

/**
 * 多態
 * @author 愛轉圈
 *
 */
public class Test{
	public static void main(String[] args){
		//聲明瞭一個Animal類型的dog
		Animal dog1 = new Dog();
		//聲明瞭一個Animal類型的cat
		Animal cat = new Cat();
		//多態實現Animal中的eat方法,不同對象實現不同
		dog1.eat("骨頭");
		cat.eat("魚");
		//子類中獨有的方法需要將類型強制轉換後才能使用
		Dog dog2 = (Dog)dog1;
		dog2.eat("肉","骨頭");
		
		/*輸出結果:
		狗狗1吃了骨頭
		貓貓吃了魚
		狗狗2吃了肉後,又吃了骨頭*/
	}
}

/**
 * 狗狗類,繼承了動物類
 * @author 愛轉圈
 *
 */
class Dog extends Animal {
	//重寫父類Animal中的eat方法
	@Override
	public void eat(String food) {
		//繼承了父類的屬性name
		this.setName("狗狗1");
		//可以通過get/set方法來訪問父類的屬性
		System.out.println(this.getName()+"吃了"+food);
	}
	
	//重載eat方法,參數個數不同了
	public void eat(String food1,String food2) {
		this.setName("狗狗2");
		System.out.println(this.getName()+"吃了"+food1+"後,又吃了"+food2);
	}
		
}
/**
 * 貓貓類,繼承了動物類
 * @author 愛轉圈
 *
 */
class Cat extends Animal{
	//重寫父類Animal中的eat方法
	@Override
	public void eat(String food) {
		//繼承了父類的屬性name
		this.setName("貓貓");
		//可以通過get/set方法來訪問父類的屬性
		System.out.println(this.getName()+"吃了"+food);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章