• 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 反射需要为空的构造方法。
     
     
  • 相关阅读:
    Application.Exit()结束程序,但线程还在的解决方法
    Myeclipse2014 SVN安装方法以及项目上传到svn服务器
    MyEclipse中把JSP默认编码改为UTF-8
    005_MyEclipse编码设置
    laravel5.2学习资源
    wechat-php-sdk
    微信邀请卡的开发
    微信JS-SDK实际分享功能
    每个Linux新手都应该记住的10个基本Linux命令
    Linux下定时备份数据库
  • 原文地址:https://www.cnblogs.com/efforts-will-be-lucky/p/7121832.html
Copyright © 2020-2023  润新知