概念
多态性是指同一操作作用于某一类对象,可以有不同的解释,产生不同的执行效果。
多态存在的条件
需要存在继承和实现关系
同样的方法调用而执行不同操作、运行不同代码
在运行时父类或者接口的引用变量可以引用其子类的对象多态作用
class Animals
{
public String name;
public void eat(){};
}
class Dog extends Animals
{
public void eat(){
System.out.println("🐕啃骨头或者吃shit");
}
}
class Cat extends Animals
{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Test {
public static void main(String[] args) {
Animals an1 = new Dog();
Animals an2 = new Cat();
an1.eat();
an2.eat();
}
}
多态的上下转型
由子类转成父类,在继承图上是向上移动的,称为向上转型(专用类型→通向类型),总是安全的,子类是父类的超集;类接口中也许会造成方法的丢失,与之相反的操作是向下转型,不安全(可能需要instanceof操作符协助)。
class Animals
{
public String name;
public void eat(){};
}
class Dog extends Animals
{
public void eat(){
System.out.println("🐕啃骨头或者吃shit");
}
public void sleep(){
System.out.println("狗狗睡觉觉");
}
}
class Cat extends Animals
{
@Override
public void eat() {
System.out.println("猫吃鱼");
}
}
public class Test {
public static void main(String[] args) {
Animals an1 = new Dog();
Animals an2 = new Cat();
Dog dog = new Dog();
an1.eat();
//an1.sleep();
dog.sleep();
an2.eat();
if(an2 instanceof Cat){
System.out.println("aa");
Cat cat = (Cat)an2;
cat.eat();
}
}
}