class Boo {
public int a = 3;
public void addFive() {
a += 5;
System.out.print("f ");
}
}
class Bar extends Boo {
public int a = 8;
public void addFive() {
this.a += 5;
System.out.print("b " );
}
public static void main(String[] args) {
Boo f = new Bar();
f.addFive();
System.out.println(f.a);
}
Asked
Active
Viewed 102 times
0
duffy356
- 3,678
- 3
- 32
- 47
3 Answers
3
You don't override the instance fields, but only hide them. So, when you access an instance field on a Boo reference, you will get the one declared in Boo class only.
And when you increment the a in the Bar constructor:
this.a += 5;
It is incrementing the a declared in Bar, since it is hiding the field a declared in Boo.
Rohit Jain
- 209,639
- 45
- 409
- 525
1
Because you used Boo
Boo f=new Bar();
reference and fields are not polymorphic
jmj
- 237,923
- 42
- 401
- 438
0
The field a in Bar is shadowing field a in Boo. It's a separate field, but because it has the same name, you must reference the field in Boo by super.a to reach it from Bar.
This previous question covers shadowing well.