Once a field is defined in a class, it must remain there forever to maintain binary compatibility.
That would be very surprising:
The Java language specification, Java SE 7 Edition, defines the binary name of an expression for unqualified access to a field as follows:
, C, (Β§13.4.9) f, (, ) D, :
- Primary.f, :
- Primary (Β§4.9) V1 ... Vn, V1.
- , Primary .
( Java 1.5 )
, , , , , , .
,
package p;
public class Super {
}
package p;
public class Sub extends Super {
public String message;
@Override
public String toString() {
return message;
}
}
package p;
public class Super {
public String message;
}
package p;
public class Sub extends Super {
@Override
public String toString() {
return message;
}
}
package p;
public class Main {
public static void main(String[] args) {
Sub sub = new Sub();
sub.message = "hello";
System.out.println(sub);
System.out.println(sub.message);
}
}
hello
hello
LinkageError.
, Java 7. , JDK 1.4 , 5 . , , / ?