Java學習筆記(5):多型
阿新 • • 發佈:2021-01-25
一:多型的訪問特點
變數看父類,方法看子類,因為變數不能過載而方法可以過載
//父類
public class animal {
int age = 10;
public void eat()
{
System.out.println("動物吃東西");
}
}
//子類
public class cat extends animal{
int age = 20;
@Override
public void eat()
{
System.out. println("貓吃魚");
}
public void paly()
{
System.out.println("貓玩棒棒");
}
}
//測試類
public class Demo {
public static void main(String[] args) {
animal c = new cat();
System.out.println(c.age);
c.eat();
c.play();//會報錯
}
}
輸出:
10 貓吃魚
二:多型的向下轉型和向上轉型
從上面的訪問play方法報錯可看出,多型中不能訪問子類的特有方法,這個時候可以利用向下轉型來訪問
public static void main(String[] args) {
//向上轉型
animal a = new cat();
//向下轉型
cat c = (cat) a;
//這時就可以訪問play方法了
a.eat();
((cat) a).paly();
c.eat();
c.paly();
}
輸出:
貓吃魚
貓玩棒棒
貓吃魚
貓玩棒棒
三.多型的好處
當我們只有一個cat類時程式碼很簡單,但如果加入dog類甚至更多呢,那我們就得不斷更改,這時候我們就可以利用多型給我們帶來的好處了。
public class animaloperation {
public void eat(animal a)
{
a.eat();
}
}
我們可以加入一個管理類,從而實現只操作main函式就能增加更多的動物類,從而實現程式碼的簡潔和操作方便。
Animal[] animals = new Animal[5];
animals [0] = new cat();
animals [1] = new dog();
animals [2] = new wolf();
animals [3] = new hippo();
animals [4] = new lion();
for(int i=0;i<animals.length;i++)
{
animals[i].eat();
animals[i].roam();
}
//這就是多型最強的地方,可以將陣列中的元素逐個調出來當作是Animal來操作
ywqlove