java - Accessing interface member variables in different ways with different results -


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

Popular posts from this blog

neo4j - finding mutual friends in a cypher statement starting with three or more persons -

php - How to remove letter in front of the word laravel -

minify - Minimizing css files -