java - Accessing interface member variables in different ways with different results -
this question has answer here:
- why java polymorphism not work in example 3 answers
- polymorphism instance variables [duplicate] 2 answers
while playing lambdas java 8. noticed interesting behaviour when trying access interface member variable in 3 ways.
import java.util.*; public interface pet { string kind ="pet"; default void interact() { system.out.println(string.format("wanna buy %s", this.kind)); } } class frog implements pet { public string kind ="frog"; public void interact() { system.out.println(this.kind); } } class rat implements pet { public string kind ="rat"; public void interact() { system.out.println(this.kind); } } public class internaliteration { public static void main(string[] args) { list<pet> pets = arrays.aslist(new rat(), new frog()); system.out.println("speak method output:"); pets.foreach((pet p)->{ p.interact(); }); system.out.println("un-casted class kind member variable:"); pets.foreach((pet p)->{ system.out.println(p.kind); }); system.out.println("casted class kind member variable:"); system.out.println(((rat)pets.get(0)).kind); system.out.println(((frog)pets.get(1)).kind); } } running code gives following result:
speak method output: rat frog un-casted class kind attribute: pet pet casted class kind attribute: rat frog it seems when accessing variable through implementations of interact method variable accessed 1 in implementation class. when accessing public variable directly interface member variable returned. accessing directly after casting seems return implementation variable again.
this looks confusing if not inconsistent me since accessing interact method , kind public variable returns different results when operating on same object.
Comments
Post a Comment