Consider the following three Java 8 classes:
SupClass.java:
public class SupClass {
public int id = 1;
public int getId() {
return id;
}
}
SubClass.java:
public class SubClass extends SupClass {
public int id = 2;
public int getId() {
return id;
}
}
Main.java:
public class Main {
public static void main(String[] args) {
SupClass One = new SupClass();
SubClass Two = new SubClass();
SupClass Wtf = (SupClass) new SubClass();
System.out.println("One.id: " + One.id);
System.out.println("Two id: " + Two.id);
System.out.println("Wtf id: " + Wtf.id);
System.out.println("One.getId: " + One.getId());
System.out.println("Two.getId: " + Two.getId());
System.out.println("Wtf.getId: " + Wtf.getId());
}
}
If you create a small project and actually run the Main
class, then you would see the following result:
One.id: 1
Two id: 2
Wtf id: 1
One.getId: 1
Two.getId: 2
Wtf.getId: 2
Why do Wtf.id
and Wtf.getId()
produce different values? Bonus points: has it always been like that or does it differ for Java 8/9/10?