浅谈对象方法的多态

129 阅读1分钟

多态

多态是对象运行时,具有多种形态. 首先多态起码是在继承或实现接口的前提下实现的

首先看一段继承的代码

/**
*动物类
*/
public class Animal {
    public String name;

    public Animal(String name) {
        this.name = name;
    }

    public void show(){
        System.out.println("我是一只动物,我名字 " + name);
    }
}
/**
*猫类继承动物类
*/
class Cat extends Animal{
    public void show(){
        System.out.println("我是一只猫,我的名字 " + name);
    }
}

/**
*狗类继承动物父类
*/
class Dog extends Animal{
    public void show(){
        System.out.println("我是一只狗,我的名字 " + name);
    }
}

/**
*猪类继承动物父类
*/
class Pig extends Animal{
    public void show(){
        System.out.println("我是一只猪,我的名字 " + name);
    }
}

然后我们在创建对象时

Cat cat = new Cat("猫猫");
Dog dog = new Dog("狗狗");
Pig pig = new Pig("猪猪");

当子类对象创建时,对象里面加载了父类的所有属性和方法,并且也加载了自己的属性和方法

cat.show();
dog.show();
pig.show();

实际运行

运行会从子类对象查找重写后的方法,执行

接下来我们进行一个拓展,当饲养员抱出一只动物,然后展示动物的信息

/**
*饲养员类
*/
public class Keeper{
    //抱出某一个动物并展示它的信息
    public void showAnimalInfo(Animal animal) {
       animal.show();
    }
}

复制代码

在此方法的参数这里,发生了一个向上的自动类型转换

父类的类型储存了子类的对象

然后根据继承的原则,我们可以用父类这个类型的对象,使用父类的属性和方法

但是在实际运行的时候,使用方法的时候,还是会根据实际的子类对象,去从子类对象先开始

由下至上的去寻找,对应的方法,先找到哪个,先运行哪个.