// Java Scope Rules:
// subclass methods over-ride superclass methods,
// but subclass member vars do not over-ride superclass member vars.

class Test
 { public static void main(String argv[]) // i.e. a stand-alone `application'.
    { SuperClass superObj = new SuperClass();
      SubClass   subObj   = new SubClass();

      show(superObj, subObj); System.out.println();

      show(subObj, subObj); // NB. *** 1st as superClass, 2nd as subClass ***
    }//main(...)

   private static void show(SuperClass supObj, SubClass subObj)
    { System.out.println("1. supObj.memberVar: " + supObj.memberVar);
      System.out.println("   supObj.staticVar: " + supObj.staticVar);
      System.out.println("   supObj.method():  " + supObj.method());
      System.out.println("   supObj.method2(): " + supObj.method2());

      System.out.println("2. subObj.memberVar: " + subObj.memberVar);
      System.out.println("   subObj.staticVar: " + subObj.staticVar);
      System.out.println("   subObj.method():  " + subObj.method());
      System.out.println("   subObj.method2(): " + subObj.method2());
    }//show(...)
 }//Test

// Lloyd Allison,
// with thanks to Bart Demoen.


class SuperClass  // extended by subClass
 { public SuperClass() { }
   public        String memberVar="memberVar from SuperClass";
   public static String staticVar="staticVar from SuperClass";
   public String method() { return "method( ) from SuperClass"; }
   public String method2()
    { return memberVar + ", " + staticVar + ", " + method(); /*try the lot*/ }
 }//SuperClass


class SubClass extends SuperClass
 { public SubClass() { }
   public        String memberVar="memberVar from SubClass";
   public static String staticVar="staticVar from SubClass";
   public String method() { return "method( ) from SubClass"; }
 }//SubClass
