// difference between defined and inherited

public class defined1 {
    
    public static void main(String args[]) {
	
	Data2 a = new Data2(1,2);

    } // method main

} // class defined1

class Data1 {
    private int m;   // m defined but not inherited
    protected int n; // n defined and inherited

    // assign values for m and n
    Data1(int i, int j) {
	m = i;
	n = j;
    } // constructor Data1

    // print value of m
    // print_m is public, so Data2 inherits this method!
    public void print_m() {
        System.out.println("m: "+m);
    } // method print_m

} // class Data1

class Data2 extends Data1 {
    Data2(int i, int j) {
	// assign values of i and j using Data1's contructor
	super(i, j);

	// m is defined in Data2, but not inherited
	// But, print_m is inherited from Data1.
	// print_m accesses the value of m to ensure the following call works.
	print_m();
	
	// Can Data2 DIRECTLY access the field m from DATA1? No!
	// The following code won't compile.
	// System.out.println("m: "+m);

	// n is defined in Data2 and is inherited from Data2
	print_n();

    } // construtor Data2 

    public void print_n() {
        System.out.println("n: "+n);
    } // method print_n

} // class Data2

/* output:
m: 1
n: 2
*/
