体现多态存在的三个必要的条件:
(1)存在继承和实现关系
(2)方法重写操作(同样的方法执行不同的操作)
(3)在运行时父类的引用变量或者接口的引用变量可以引用子类的对象
如:Animal animal =new Dog();
典型代码如下:
public class AnimalDemo {
/**
* 多态 by caiwencai 20190713
*/
public static void main(String[] args) {
Animal animal=new Dog("哈士奇");//这个也叫向上转型
//调用的是Animal中的eat()方法,然后再找Dog类(子类,这里是Dog类)有没有重写该方法,有就是调用Dog中的eat()方法
animal.eat();
Dog dog=new Dog("哈士奇");
dog.eat();//调用子类的eat()方法
}
}
//创建一个动物类
class Animal{
public String name;
//构造方法初始化工作,初始化名字
public Animal(String name){
this.name=name;
}
//声明一个吃的方法,让子类去实现相关的事情(一般该方法为抽象方法,但现在这里啥也不实现)
public void eat(){
}
}
//写一个Dog类继承与Animal,重写eat()方法
class Dog extends Animal{
//声明构造方法,实现初始化工作
public Dog(String name) {
//调用父类的构造方法,一般创建子类对象时先先调用父类的构造方法再调用自己的构造方法
//假如父类没有声明构造方法,也会先调用父类的默认的构造方法;
super(name);
}
public void eat(){
System.out.println("吃骨头");
}
}
//写一个Cat类继承与Animal,重写eat()方法
class Cat extends Animal{
//声明构造方法,实现初始化工作
public Cat(String name) {
//调用父类的构造方法,一般创建子类对象时先先调用父类的构造方法再调用自己的构造方法
//假如父类没有声明构造方法,也会先调用父类的默认的构造方法;
super(name);
}
public void eat(){
System.out.println("吃鱼");
}
}