愛轉圈筆記
勤思、體悟、總結、分享
面向對象——多態
多態
多態的意義
- 父類對象子類創建(父類類型指向子類對象)
- 同一行爲,不同對象表現不一樣(類似方法重寫)
多態的實現方式
- 父類類型作爲方法形參,實際傳入子類對象;
- 父類類型作爲方法返回值,實際返回子類對象;
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);
}
}