子类中的变量名称与父类的变量名称相同,无论类型是否匹配,子类中的变量名称都不能直接从变量名称访问。
(我个人认为这是个不好的设计。 对于代码的可读性和可维护性非常不友好。 编译器应该直接报告错误,并禁止重载此类同名变量。)
定义父类:
package com.xxx.test.inherit; publicclasstestparent { public intvar=1; protected void doTest () system.out.println (intestparent 33603360 dotest ),var=' var ); }
定义子类:
package com.xxx.test.inherit; publicclasstestchildextendstestparent { protectedfloatvar=1.2f; public void doTest () system.out.println (intestchild 3360: dotest ),var=' var ); } publicstaticvoidmain (string [ ] args ) {TestParent t=new TestChild ); t.doTest (; system.out.println(var='t.var ); }
执行结果
in TestChild:doTest (,var=1.2var=1
说明
请注意,子类的成员函数doTest可以访问子类的var (浮动类型)。
打印到system.out.println('var='t.var )的结果为1。 为什么会这样呢? 这是因为它引用了父类中的变量。 其理由是t被声明了父类的TestParent。 实际上是子类的实例,但java变量绑定在编译时采用静态绑定,如果编译器在编译时知道t是父类,则绑定父类的var。 相比之下,所有绑定了函数的java都使用动态绑定。 这是因为t.doTest () (父类的doTest ) )没有绑定。