定义一个父类 再定义一个子类继承父类 再使用父类名和子类名分别实例化子类 输出成员方法、成员属性、静态方法的结果

public class Fu {
    int a = 1;
    public void fun() {
        System.out.println("Fu");
    }
    public static void staticfun() {
        System.out.println("staticFu");
    }
}
public class Zi extends Fu{
    int a = 2;
    public void fun() {
        System.out.println("Zi");
    }
    public static void staticfun() {
        System.out.println("staticZi");
    }
}
public class Test {
    public static void main(String[] args) {
        Fu obj1 = new Zi();
        System.out.println(obj1.a); // 1
        obj1.fun(); // Zi
        obj1.staticfun(); // staticFu
        Zi obj2 = new Zi();
        System.out.println(obj2.a); // 2
        obj2.fun(); // Zi
        obj2.staticfun(); // staticZi
    }
}

成员属性

编译时 参考的是引用型变量所属的类中是否有被调用的成员变量,类中不存在该属性就会编译失败。

运行时 调用引用型变量所属的类中的成员属性。

编译看左边,运行看左边。

成员方法

编译时 参考的是引用型变量所属的类中是否有被调用的成员方法,类中不存在该方法就会编译失败。

运行时 参考右边的对象所属的类。

编译看左边,运行看右边。

静态方法

编译时 参考的是引用型变量所属的类中是否有被调用的静态方法,类中不存在该方法就会编译失败。

运行时 调用引用型变量所属的类中的静态方法。

编译看左边,运行看左边。