小弟最近在一本书上看到一个结论:继承下来的方能可以被覆盖,但实例变量不能被覆盖。方法能被覆盖我没什么意见,但是实例变量我觉得也能被覆盖,下边是我写的例子:
class AAA {
int ivar = 6;
public void noise() {
System.out.println("a a a ....");
}
}class BBB extends AAA {
int ivar = 8; //没有这句,main()里边打印出来的是 6
public void noise() {
System.out.println("b b b ....");
}
}public class OverrideTest {
public static void main(String args[]) {
BBB b = new BBB();
b.noise();
System.out.println("ivar = " + b.ivar);
}}
BBB 中 int ivar = 8 难道不算是覆盖吗?请各位大哥大姐帮忙看看,谢谢!
class AAA {
int ivar = 6;
public void noise() {
System.out.println("a a a ....");
}
}class BBB extends AAA {
int ivar = 8; //没有这句,main()里边打印出来的是 6
public void noise() {
System.out.println("b b b ....");
}
}public class OverrideTest {
public static void main(String args[]) {
BBB b = new BBB();
b.noise();
System.out.println("ivar = " + b.ivar);
}}
BBB 中 int ivar = 8 难道不算是覆盖吗?请各位大哥大姐帮忙看看,谢谢!
如果重写了这个返回的依然是BBB的
public static void main(String[] args) {
a aa = new b();
aa.ff();
System.out.println(aa.a);
System.out.println(((b)aa).a);
}
}class a {
public int a = 1;
public void ff() {
System.out.println(a);
}
}class b extends a {
public int a = 2;
public void ff() {
System.out.println(super.a + " " + this.a);
super.ff();
}
}上面的代码,当调用aa.ff()的时候,是多态的现象。而aa反问成员变量的时候,却没有显示出多态的效果。个人觉得这是作用域的效果。还有一个情况,就是你在类中定义的变量跟你在方法中定义的变量发生冲突的时候,方法内的局部变量在方法内有效,如果你想访问类的成员变量需要加上this标识符。