一:多态的访问特点
变量看父类,方法看子类,因为变量不能重载而方法可以重载
//父类
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