//overriding replaces superclass's member function implementations

class A0 {
	public void g() {System.out.println("A0::g");}
}

class A extends A0 {
	private int i;
	A () {i=10;}
	public void f() {System.out.println("A::f " + i);}
}
class B extends A {
	private int j;
	B() {j=20;}
	public void f() {System.out.println("B::f " + j);}
	public void g() {System.out.println("B::g " + j);}
}

class Overriding {
	public static void main (String args[]) {
		A a = new B();
		a.f();
		a.g();

		A a2 = new A();
		a2.f();
		a2.g();

		// B b = new A(); <--- error 
	}
}

