DEV Community

Java Inheritance Puzzle

Ildarov on April 02, 2019

Imagine we have one interface and these classes: interface SuperType { void test(); } class DefaultSuperType implements SuperType{ @Ov...
Collapse
 
samwho profile image
Sam Rose

I think it's 1, and it's because the object is always of type ChildOfSuperType no matter what type you store it in, so when the method is dispatched it will always resolve to the version on ChildOfSuperType.

/me goes to check.

Spoiler here for anyone wondering what the answer is: repl.it/@samwho/KnownEnormousWeara...

Collapse
 
jrtibbetts profile image
Jason R Tibbetts

1. It doesn't matter whether superType is cast as DefaultSuperType, because it's still a ChildOfSuperType, and the function dispatch table will still point to ChildOfSuperType.test().

Collapse
 
nektro profile image
Meghan (she/her)

The others were right in saying "1", but you also have the annotation wrong. It's just @Override

Collapse
 
devit951 profile image
Ildarov

Thank you. I corrected it.

Collapse
 
mandraketech profile image
Navneet Karnani

"1". Because, in Java, the actual object's implementation is used, and not the typecast.