多态
多态是对象运行时,具有多种形态. 首先多态起码是在继承或实现接口的前提下实现的
首先看一段继承的代码
/**
*动物类
*/
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();
}
}
复制代码
在此方法的参数这里,发生了一个向上的自动类型转换
父类的类型储存了子类的对象
然后根据继承的原则,我们可以用父类这个类型的对象,使用父类的属性和方法
但是在实际运行的时候,使用方法的时候,还是会根据实际的子类对象,去从子类对象先开始
由下至上的去寻找,对应的方法,先找到哪个,先运行哪个.