• java学习——基础入门(2)


    本文为学习笔记,留作自用,不会记载的特别详细,如有错误,欢迎指正

    1. 关于无参构造函数与有参构造函数

    我们都知道如果不定义无参构造函数系统会自动调用默认构造函数

    当我们定义了一个有参构造函数,就必须手动定义一个无参构造函数

    这里来尝试分析下原因,首先要了解下构造函数的调用逻辑

    上图中我们可以看出子类的构造函数将会递归优先调用父类方法的

    无参构造函数,效果相当于

    class GrandFather{
        public GrandFather(){
            super();
            System.out.println("高层构造函数");
        }
    }
    
    class Father extends GrandFather{    
        public Father(){
            super();
            System.out.println("中层构造函数");
        }
    }
    
    class Son extends Father{    
        public Son(){
            super();
            System.out.println("底层构造函数");
        }
    }

    只不过这里将super给隐藏了,这是系统默认会执行的语句

    我们可以发现,无参构造函数在申明时默认调用的是父类的无参构造函数。

    加入我们把中间一层的无参构造函数去掉,并只申明一个有参构造函数。

    此时,编译器将提醒我们存在编译错误:Implicit super constructor Father() is undefined. Must explicitly invoke another constructor

    强制要求我们申明Father类的无参构造函数,这是因为编译器认为,此时子类并不想走

    父类的无参构造函数,但是又没有指明该走哪条路,这里的super()失效了,

    所以我们可以给Son指出他的道路

    只要显示的申明super(1),告诉子类递归走父类的哪一个构造函数即可。

    由此可见,实际上一个类假如不作为父类,不申明无参构造函数并不会造成实际影响。

    但我们并无法保证永远不作为子类这一前提,所以我们还是需要遵循规则去显示的申明。

    值得注意的是,每个构造函数的首行如果没有显示的super父类构造函数,编译器将默认添加上super(),指向

    父类的默认构造函数

    在构造方法中调用另一个构造方法,调用动作必须置于最起始的位置。
    不能在构造方法以外的任何方法内调用构造方法。
    在一个构造方法内只能调用一个构造方法。

    争取早日不再是一只菜鸡
  • 相关阅读:
    Python爬虫利器一之Requests库的用法
    python——时间与时间戳之间的转换
    pyDes库 实现python的des加密
    python 统计发送请求到接收response的时间
    Jenkins进阶系列之——02email-ext邮件通知模板
    Jenkins进阶系列之——01使用email-ext替换Jenkins的默认邮件通知
    Jenkins+Ant+Jmeter搭建持续集成的接口测试平台
    Java连接MySQL数据库——含步骤和代码
    CentOS 7.1 中文正式版下载
    Python数据结构之实现队列
  • 原文地址:https://www.cnblogs.com/jchen104/p/14655940.html
Copyright © 2020-2023  润新知