/**
 * This program illustrates 
 * instance and class methods overriding and hiding
 * Based on  \href{https://www.coderanch.com/wiki/659959/Overriding-Hiding}{CodeRanch: Overriding vs Hiding}
 * 
 * @author Phil Molyneux
 * @version 1.0 (6 June 2019)
 */
class OverrideHideEG {
  public static void main(String[] args) {
    Foo f = new Bar();
    f.instanceMethod();
    f.classMethod();
  }
}

/**
 * Class Foo defines 
 * class method classMethod()
 * instance method instanceMethod()
 */
class Foo {
  public static void classMethod() {
    System.out.println("classMethod() in Foo");
  }
  
  public void instanceMethod() {
    System.out.println("instanceMethod() in Foo");
  }
}

/**
 * Class Bar is a subclass of Foo also defining
 * class method classMethod()
 * instance method instanceMethod()
 */
class Bar extends Foo {
  public static void classMethod() {
    System.out.println("classMethod() in Bar");
  }
  
  public void instanceMethod() {
    System.out.println("instanceMethod() in Bar");
  }
}

