zoukankan      html  css  js  c++  java
  • Java 子类初始化父类的构造方法 成员变量不支持多态

    class Fu{
    int a=2;
    Fu() {
    System.out.println("fu run");
    }
    }
    class Zi extends Fu{
    Zi() {
    System.out.println("zi run");
    }
    }

    public class Copy {
    public static void main(String[] args) {

    Zi zi = new Zi();
    System.out.println(zi.a);
    }

    }

    运行结果为 fu run ,zi run ,0 说明子类在实例化的时候,调取了父类的构造函数中的方法,但并没有调用成员变量。,

    ====== 子类 实例化的时候 默认调用父类为空的构造方法 即super();
                   可以不写 但是当父类没有为空的构造方法的时候,就必须在子类中调用那个不为空的构造方法先实例父类 才能实例子类。为空的构造方法 默认存在 在子类中默认自动调用。

    ========父类引用指向子类对象的时候  根据引用变量中 实例所属的类调用不同的类的方法,这种多态只适用于方法不适用与成员变量。

    简单的理解为Java不支持属性字段覆盖(override),只支持方法覆盖 。

    ======实例化子类的时候,初始化了父类的构造函数,但未产生对象,因为父类有可能是接口,若父类有为空的构造方法则默认调用。因为子类必须持有父类的成员变量值,所以要初始化一下,且对于成员变量不能重写,重写也无多态效果。
               Ctrl n new class的时候  记得勾选 Constructors from  superclass  最好默认都选上省事 这样就会默认都加上为空的构造方法。
               没有为空的构造方无法隐身初始化bean 反射需要为空的构造方法。
     
     
  • 相关阅读:
    软件体系架构复习要点
    Operating System on Raspberry Pi 3b
    2019-2020 ICPC North-Western Russia Regional Contest
    2019 ICPC ShenYang Regional Online Contest
    2019 ICPC XuZhou Regional Online Contest
    2019 ICPC NanChang Regional Online Contest
    2019 ICPC NanJing Regional Online Contest
    Codeforces Edu Round 72 (Rated for Div. 2)
    Codeforces Round #583 (Div.1+Div.2)
    AtCoder Beginning Contest 139
  • 原文地址:https://www.cnblogs.com/efforts-will-be-lucky/p/7121832.html
Copyright © 2011-2022 走看看