本质
语法
父类类型 引用名 = new 子类类型();
特点
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("吃");}public void show() {System.out.println("hello,你好");}
}
<a name="xwFfY"></a>## Cat```javapackage detail;public class Cat extends Animal {@Overridepublic void eat() {//方法重写System.out.println("猫吃鱼");}public void catchMouse() {//Cat特有方法System.out.println("猫抓老鼠");}}
Main
package detail;public class Main {public static void main(String[] args) {//向上转型: 父类的引用指向子类的对象//语法: 父类类型引用名 = new 子类类型();Animal animal = new Cat();//在Object面前,所有类都是儿子Object obj = new Cat();//可以吗? 可以 Object 也是 Cat的父类//向上转型调用方法的规则如下://可以调用父类的所有成员(需要遵守访问权限)//但是不能调用子类的特有成员//animal.catchMouse();//报错!!!//因为在编译阶段,能调用哪些成员,是由编译类型来决定的//最终运行效果看子类(运行类型)的具体实现, 即调用方法时,按照从子类(运行类型)开始查找方法//子类中没有该方法时,然后从父类中开始寻找该方法。animal.eat();//猫吃鱼..animal.run();//跑animal.show();//hello,你好animal.sleep();//睡}}
运行结果

