继承是多态的基础
多态分为 *方法多态*与 *引用多态*
引用多态:父类可以指向子类对象引用,也可以指向本类对象引用。
具体表现为声明对象:
父类 对象名=new 父类构造()
父类 对象名=new 子类构造()
对象名 前面是类型引用 , new “空格” X类构造()决定属于什么类的对象。
方法的多态具体表现:
当子类中出现同名方法时,优先调用本类方法,可以理解为重写。
子类没有出现同名方法则继续调用父类方法。
package Animal;
//多态示例
public class Animal {
public void eat() { // 父类方法
System.out.println("动物吃肉");
}
}
package Animal;
public class Cat extends Animal {
public void eat1() { //子类独有的方法
System.out.println("猫喜欢吃鱼");
}
}
package Animal;
public class dog extends Animal {
public void eat() { // 子类方法重写
System.out.println("小狗吃肉");
}
public void wacthdoor() { //子类独有方法
System.out.println("狗可以看门");
}
}
package Animal;
public class run {
public static void main(String[] args) { // 以下为多态示例。
Animal Animal = new Animal(); // 父类引用 对象名=new 父类实例化
Animal dog = new dog(); // }
// }父类引用 对象名=new 子类实例化
Animal cat = new Cat(); // }
// dog obj3=new Animal(); // 禁止 :子类引用 对象名=new 父类实例化 //编译器报错
Animal.eat();
dog.eat(); //子类中eat方法被重写了,优先调用本类(对象所输类)方法。
cat.eat(); //子类中没有同名方法,所以方法没有被重写,只能调用父类方法。
// dog.wacthdoor(); //父类引用的子类对象不允许调用子类方法
// cat.eat1(); //父类引用的子类对象不允许调用子类方法
}
}
运行结果:
动物吃肉
小狗吃肉
动物吃肉