方法的重新与重载是一种形式的多态.
然而类的多态才是核心.
核心
为什么多态可以成立
本质上是因为继承关系,让子类可以继承父类,(可以兼容),从而可以直接改变对象运行时的类型,
//转化类型是可以的,然后就可以变为运行时类型了.
本质上只是多人一个不同类型(父类,或子类)的指向已经new出来子类的空间.
Animal animal = new Cat();
Object obj = new Cat();//Object 也是 Cat 的父类
Cat cat = (Cat) animal;
cat.catchMouse();//猫抓老鼠
虽然向下转型,然而他还是先去找他的子类.
他输出类型是
package Detail01;
public class Animal {
String name = "动物";
int age = 10;
public void sleep() {
System.out.println("睡");
}
public void run() {
System.out.println("跑");
}
public void eat() {
System.out.println("吃");
}
}
package Detail01;
public class Cat extends Animal{
public void eat(){//方法重写
System.out.println("猫吃鱼");
}
public void catchMouse(){//Cat 特有方法
System.out.println("猫抓老鼠");
}
}
package Detail01;
public class Dog extends Animal{
public void eat(){
System.out.println("狗吃骨头");
}
}
package Detail01;
public class Polydetail {
public static void main(String[] args) {
Animal animal = new Cat();
Object obj = new Cat();//Object 也是 Cat 的父类
//animal.catchMouse();错误
animal.eat();//猫吃鱼.. animal.run();//跑
animal.show();//hello,你好
animal.sleep();//睡
Cat cat = (Cat) animal;
cat.catchMouse();//猫抓老鼠
// Dog dog = (Dog) animal; //可以吗?
// dog.eat();//错误的,因为现在animal指向cat的内存,
//如果我们要执行上面的那条语句,
//就相当于与把cat转成dao,这显然是错误
System.out.println("ok~~");
}
}
java重写
//a 的编译类型 A, 运行类型 B
A a = new B();//向上转型
参考:
0314_韩顺平Java_动态绑定机制_哔哩哔哩_bilibili
0352_韩顺平Java_本章作业11_哔哩哔哩_bilibili
(3条消息) JAVA 多态(韩顺平)_农大带刺小玫瑰的博客-CSDN博客
0354_韩顺平Java_本章作业13_哔哩哔哩_bilibili
0357_韩顺平Java_本章作业16_哔哩哔哩_bilibili
定位到当前最新的运行时类型,然后再遵循动态绑定机制。