如何理解Java中"父类对象由子类实例化"?

import java.io.*;

class A {
    public void fun1() {
        System.out.println("111");
    } //定义父类中非静态的fun1方法

    public static void fun2() {
        System.out.println("222");
    } //定义父类中静态的fun2方法
}

class B extends A {
    public void fun1() {
        System.out.println("333");
    } //覆写父类A中非静态的fun1方法

    public static void fun2() {
        System.out.println("444");
    } //覆写父类A中静态的fun2方法

    public void fun3() {
        System.out.println("555"); } //定义子类自己的方法

}

class test {
    public static void main(String[] args) throws java.lang.Exception {
        System.out.println("hi");
        A a = new B();
        a.fun1(); // 子类重写父类非静态方法,多态下访问的是子类的成员方法。
        a.fun2(); // 子类重写父类静态方法,多态下访问的是父类的静态方法。
        a.fun3(): // 无法执行,父类中没有定义fun3方法
    }
}

总结下的话就是:
1:当父类和子类具有相同的非静态成员变量,那么在多态下访问的是父类的成员变量
2:当父类和子类具有相同的静态成员变量,那么在多态下访问的是父类的静态成员变量
所以:父类和子类有相同的成员变量,多态下访问的是父类的成员变量。
3:当父类和子类具有相同的非静态方法(就是子类重写父类方法),多态下访问的是子类的成员方法。
4:当父类和子类具有相同的静态方法(就是子类重写父类静态方法),多态下访问的是父类的静态方法。
@爵士稿手

你可能感兴趣的:(如何理解Java中"父类对象由子类实例化"?)