Suppose A
is a superclass of B
and each have property i
with default value is 0
.
B b = new B();
System.out.print(b.i);
A a = b;
a.i = 3;
System.out.print(b.i);
Why the output is 00
not 03
?
Does casting create new object?
Edit :
These are A and B :
class A {
int i;
}
class B extends A {
int i;
}
CodePudding user response:
Without seeing A
or B
it's somewhat hard to speculate, but it sounds like you have a second field i
in B
that shadows the field i
in A
. Here is a complete self contained example,
static class A {
public int i = 0;
}
static class B extends A {
public B() {
this.i = 2;
}
}
public static void main(String[] args) {
B b = new B();
System.out.println(b.i);
A a = b;
a.i = 3;
System.out.println(b.i);
}
And that outputs
2
3
Clearly demonstrating that casting does not create a new object.