博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
继承环境下的构造方法调用
阅读量:5880 次
发布时间:2019-06-19

本文共 1592 字,大约阅读时间需要 5 分钟。

我们都知道如果初始化一个子类,一定会先初始化父类,即调用父类的构造方法,再调用子类的构造方法,但是如果父类有很多的构造方法,那么调用哪一个呢?看下面的例子:

package io;public class ConstructorTest {    public static void main(String[] args) {        // TODO Auto-generated method stub        B b = new B(100);        //B b = new B();    }}class A {    public A() {        System.out.println("A no params");    }    public A(int i) {        System.out.println("A has params");    }}class B extends A{    public B(){        System.out.println("B no param");    }    public B(int i) {        System.out.println("B has params");    }}

output:

A no paramsB has params

可以看到调用了父类的默认构造方法,为了验证如果将A的无参数的构造方法注释掉,则new B的时候会报错,

class A {    /*public A() {        System.out.println("A no params");    }*/    public A(int i) {        System.out.println("A has params");    }}
Implicit super constructor A() is undefined. Must explicitly invoke another constructor

而如果这时候将A的两个构造方法都注释掉,却又不报错了:

class A {    /*public A() {        System.out.println("A no params");    }*/    /*public A(int i) {        System.out.println("A has params");    }*/}

这是因为如果A中没有构造方法,那么会默认给它创建一个无参数的构造方法。而如果有其它的构造方法了,就不会给它创建了。

所以说子类默认调用的是父类的无参数的构造方法,或者当父类确实没有无参数的构造方法时,还可以通过super来调用它的其它构造方法:

class A {    /*public A() {        System.out.println("A no params");    }*/    public A(int i) {        System.out.println("A has params");    }}class B extends A{    public B(){        super(21);        System.out.println("B no param");    }    public B(int i) {        super(i);        System.out.println("B has params");    }}

注意:如果要显式的调用super,那么必须把它放在第一位。如果不放在第一位,那么super之前的初始化语句等于是没有执行,因为在super中还得重新初始化,这显然不符合情理、

转载地址:http://ascix.baihongyu.com/

你可能感兴趣的文章
Redis_master-slave模式
查看>>
qemu安装
查看>>
多媒体开发之rtmp---rtmp client 端的实现
查看>>
3.使用Maven构建Web项目
查看>>
cisco 多生成树MST笔记
查看>>
C 到 C++ 的升级(一)
查看>>
彻底卸载删除微软Win10易升方法
查看>>
Ajaxload动态加载动画生成工具的实现(ajaxload的本地移植)
查看>>
SWT/JFACE之环境配置(一)
查看>>
手把手构建LAMP
查看>>
关于outlook 保存的.msg文件打开一次之后不能再次打开的问题
查看>>
CentOS 6.6安装python3.4.3后yum不能使用的解决办法
查看>>
应用程序日志中总是说MS DTC无法正确处理DC 升级/降级事件,是什么意思
查看>>
毕业了,爱情怎么办?
查看>>
关于django一个请求的生命周期
查看>>
Supervisor-容器中启动多个程序
查看>>
CSS颜色代码大全
查看>>
mybatis数据处理的几种方式
查看>>
QStandardItem and QStandardItemModel Class Reference
查看>>
友情链接的作用
查看>>