class A {
    int ivar = 7;
    void m1() {
        System.out.println ("A's m1, ");
    }
    void m2() {
        System.out.println ("A's m2, ");
    }
    void m3() {
        System.out.println("A's m3, ");
    }
}

class B extends A {
    void m1() {
        System.out.println("B's m1, ");
    }
}
class C extends B {
    void m3() {
        System.out.println("C's m3, "+(ivar+6));
    }
}

public class Mixed2 {
    public static void main (String[] args){
        A a = new A();
        B b = new B (); // создаем объект класса В (но почему он заменяет метод m1 из класса А)
        b.m1(); // заменяет метод m1 из класса А
        b.m2();//а здесь странно! методы из класса А (почему)
        b.m3();;//а здесь странно! методы из класса А (почему)

        C c = new C ();

        A a2 = new C (); // КАК ПОНЯТЬ? создаем объект класса А но при чем здесь С???
        a2.m3();
        a2.m1();
        a2.m2();
    }
}