Java学习笔记(5):多态

一:多态的访问特点

变量看父类,方法看子类,因为变量不能重载而方法可以重载

//父类
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

猜你喜欢

转载自blog.csdn.net/qq_51677496/article/details/113075667