本帖最后由 帅哥哥 于 2014-4-5 00:20 编辑
只要知道一个知识点就可以解决这个问题
“Java中,对父类子类中相同的成员变量和相同的成员函数的不同处理”
1.对成员函数,是实实在在的覆盖,也就是重写
就像楼主代码中的 foo.addFive(); 虽然foo是父类型的引用变量,但指向的是子类对象new Bar(),而addFive()函数又重写了,所以这句调用的是子类的addFive()方法,方法中操作的a是本类也就是Bar中的a
2.对成员变量,java不能覆盖成员变量,父类子类中都有 public int a; ,各自是各自的
楼主打印的是 foo.a ,而foo是父类型的引用变量,所以,调用的是父类中的a,父类中的a初始化是3,又没有操作过,所以打印的是3,如果楼主打印的是 ((Bar)foo).a ,则打印出来的是13 (8+5),
如果楼主创建的是父类对象 Foo foo = new Foo(); 则打印的 foo.a 是 18
|