直接上代码
class Bird{
int size=10;
void print(){
System.out.println("aa");}
}class Vane extends Bird{
int size=20;
void print(){
System.out.println("bb");}
}public class hello{
public static void main(String[] args){
Vane a=new Vane();
System.out.println(a.size);
Bird b=new Vane();
System.out.println(b.size);
a.print();
b.print();
}
}结果是:20
10
bb
bb
成员变量的输出结果还可以理解,后面方法的调用就不知道了,请高手解答
class Bird{
int size=10;
void print(){
System.out.println("aa");}
}class Vane extends Bird{
int size=20;
void print(){
System.out.println("bb");}
}public class hello{
public static void main(String[] args){
Vane a=new Vane();
System.out.println(a.size);
Bird b=new Vane();
System.out.println(b.size);
a.print();
b.print();
}
}结果是:20
10
bb
bb
成员变量的输出结果还可以理解,后面方法的调用就不知道了,请高手解答
b对象还是Vane,它是Vane实例化的(new Vane)
楼主看看这个BLOG吧
对象是谁new出来的 同名方法(也就是重写的方法)就调用谁的
这个要从Java中方法的动态绑定解释
而同名的属性 因为父类引用无法引用到子类的属性故打印出来的是父类的
即属性看引用类型,方法看对象类型。
建议LZ看看 thinking in Java
那里边讲的比较细致
换个更直观的例子
把你的鸟类换成动物(Animal),把你的vane换成人(Person)
把你的print换成cry当你 Animal a = new Person();
a.cry时,你说是人在哭,还是动物在哭