method overriding Vs class variable overriding in java -
i trying sample code checking class variable overriding behavior in java. below code:
class a{ int i=0; void sayhi(){ system.out.println("hi a"); } } class b extends a{ int i=2; void sayhi(){ system.out.println("hi b"); } } public class helloworld { public static void main(string[] args) { a= new b(); system.out.println("i->"+a.i); // prints 0, system.out.println("i->"+((b)a).i); // prints 2, b a.sayhi(); // method b gets called since object of type b } }
i not able understand whats happening @ these 2 lines below
system.out.println("i->"+a.i); // prints 0, system.out.println("i->"+((b)a).i); // prints 2, b
why a.i
print 0
if object of type b
? , why print 2
after casting b
?
i
not method - it's data member. data members don't override, hide. though instance b
, has 2 data members - i
a
, i
b
. when reference through a
reference former , when use b
reference (e.g., explicitly casting it), you'll latter.
instance methods, on other hand, behave differently. regardless of the type of reference, since instance b
instance, you'll polymorphic behavior , string "hi b"
printed.
Comments
Post a Comment