介绍
代码
父类
package b;
public class father_ {//father class
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("你好");
}
}
子类
package b;
public class graduate extends father_ {
public void eat() {
System.out.println("猫吃鱼");
}
public void catchmouse() {
System.out.println("猫抓老鼠");
}
}
主类
package b;
public class main_ {
public static void main(String[] args) {
//向上转型,父类的引用转向了子类的
father_ animal=new graduate();
Object obj=new graduate();
System.out.println(animal.catch);
System.out.println(obj.name);
}
}
向上转型就是我们前面讲的编译类是主类,运行类是子类,能调用的方法必须是子类和父类都有的,如果子类没有就按照查找原则找父类。并且不能调用子类特有的特有成员。因为对于我们
animal 的编译是father_,根本不知道catch是哪个
在编译阶段能够调用哪些成员是由编译类型决定的,你无法找到运行对象时的方法,
javac是看编译类型,即父类的。java看运行类型,即子类的。所以就有了运行时候的查找规则