半年前学的已经忘了,现在来复习一下。。。
1、多态的一个小例子
public class PolyObject { public static void main(String[] args) { //体验对象多态特点 //animal 编译类型就是 Animal , 运行类型 Dog Animal animal = new Dog(); //因为运行时 , 执行到改行时,animal 运行类型是 Dog,所以 cry 就是 Dog 的 cry animal.cry(); //小狗汪汪叫 //animal 编译类型 Animal,运行类型就是 Cat animal = new Cat(); animal.cry(); //小猫喵喵叫 } }
在这个例子中,cat和dog都继承了animal类,并且这三个类中都有各自的cry()方法
但是在运行的时候,我们将
Animal animal = new Dog();
然后执行animal.cry();
那么,在这里,将执行dog.cry()
因为运行类型是dog,编译类型是animal。
2、向上转型和向下转型
/向上转型调用方法的规则如下: //(1)可以调用父类中的所有成员(需遵守访问权限) //(2)但是不能调用子类的特有的成员 //(3)因为在编译阶段,能调用哪些成员,是由编译类型来决定的 /(4)最终运行效果看子类(运行类型)的具体实现, 即调用方法时,按照从子类(运行类型)开始查找方法 //,然后调用 例子: 现在有个animal类,里面有睡、跑、吃、打招呼的方法 然后有一个cat类继承了animal类,并且重写了吃的方法(变成猫吃鱼),并且有猫自己特别的方法(猫抓老鼠) 那么: //向上转型: 父类的引用指向了子类的对象 //语法:父类类型引用名 = new 子类类型(); Animal animal = new Cat(); Object obj = new Cat();//可以吗? 可以 Object 也是 Cat 的父类 animal.eat();//猫吃鱼.. animal.run();//跑 animal.show();//hello,你好 animal.sleep();//睡 在这里面,进行了向上转型,但仍然调用子类重写的方法(猫吃鱼),但是跑,打招呼和睡子类中都没有,所以调用父类的方法。 但是,不可以调用子类特有的方法。 如果需要调用,则需要向下转型 Cat cat = (Cat) animal; cat.catchMouse();//猫抓老鼠 //多态的向下转型 //(1)语法:子类类型 引用名 =(子类类型)父类引用;
3、属性的值
多态的应用应该还是很多的,这个只是最基本,后面学到有再更新
标签:调用,Java,--,子类,cry,多态,Cat,animal,类型 From: https://www.cnblogs.com/timothygrass/p/17617998.html