I have two classes and an interface shown below.
Quick summary: Interface Winterface, Class Big, Class Little that extends Big and implements Winterface.
public interface Winterface {}
public class Big {
public int hello = 88;
public Big() {}
public void theMethod() {
System.out.println ("Big was here: " + (this instanceof Winterface) + ", " + this.hello);
}
}
public class Little extends Big implements Winterface{
private boolean hello = true;
public Little(){}
public void theMethod() {
super.theMethod();
System.out.println("Little was here: " + hello);
}
public static void main(String [] args) {
Little l = new Little();
l.theMethod();
}
}
When I execute the main in Little, I get the following output
Big was here: true, 88
Little was here: true
my question is, how can
1) (this instanceof Winterface) return true but
2) this.hello be 88?
If this.hello = 88, then this = Big, which isn’t an instance of Winterface.
I do not understand how this is possible, thanks in advance
EDIT: THANKS everyone I understand now that ‘this’ refers to little, which is a Big and implements Winterface. Since the method is being called as super.theMethod(), the variable ‘hello’ available is the one in Big even though ‘this’ refers to little.
thiscan only be one class. Howeverthis.hellois the field accessible to that class.As
thiscan only be one class it is aLittlewhich has a parentBigand implementsWinterfaceWhen you call a method in its parent which can only seehellothat is what it sees.i.e. Java supports polymorphism for methods but not fields.