博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java中继承,子类是否继承父类的构造函数
阅读量:4186 次
发布时间:2019-05-26

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

java中继承,子类是否继承父类的构造函数

java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式)

下面来看例子:

public class TestExtends {    public static void main(String[] args) {        SonClass s = new SonClass(66);    }}class FooClass{    public FooClass() {        System.out.println(100);    }    public FooClass(int count) {        System.out.println(count);    }}class SonClass extends FooClass{    public SonClass() {    }    public SonClass(int c) {        System.out.println(1234);    }}

运行结果:

100 1234

接下来分析为什么会产生这样的结果:

程序在执行SonClass s = new SonClass(66);这行时,调用

public SonClass(int c) {    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();}

因此子类在执行上面的构造方法时,等价于执行了下面的代码:

public SonClass(int c) {    super(); // 必须在第一行调用,否则不能编译    System.out.println(1234);  //在执行这行时系统会优先调用父类的无参构造函数super();}

所以结果为:

100 1234

接下来介绍另外一种情况(显式调用),如果子类构造函数是这样写的:

public SonClass(int c) {    super(2); // 必须写在第一行,否则不能编译,显式调用父类构造函数后,系统就不在默认调用无参构造函数了    System.out.println(1234);}

执行结构是:

2 1234

总结:

  • 构造函数是不能继承的,只是用来在子类调用,(如果父类没有无参构造函数,创建子类时,必须在子类构造函数代码体的第一行显式调用父类的有参数构造函数,否则不能编译);
  • 如果父类没有有参构造函数,那么在创建子类时可以不显式调用父类构造函数,系统会默认调用父类的无参构造函数super();
  • 如果父类没有无参构造函数,那系统就调不了默认的无参构造函数了,所以不显示调用编译也就无法通过了;

补充说明:

  1. 在java中,创建有参构造函数后,系统就不在有默认的无参构造函数
  2. 如果父类中没有任何构造函数,系统会默认有一个无参的构造函数

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

你可能感兴趣的文章
关于方法覆盖和属性覆盖的问题?
查看>>
JAVA中ListIterator和Iterator详解
查看>>
目标和
查看>>
跳跃游戏
查看>>
买卖股票的最佳时机 II
查看>>
分发饼干
查看>>
最低票价
查看>>
删列造序
查看>>
使括号有效的最少添加
查看>>
令牌放置
查看>>
回溯法思想
查看>>
子集和问题
查看>>
旅行售货员问题
查看>>
区域和检索 - 数组不可变
查看>>
整数分解
查看>>
最长有效括号
查看>>
救生艇
查看>>
Android中自定义圆形图片(一)
查看>>
Android中ViewPager自动加手动轮播
查看>>
Android中Fragment点击切换与添加ViewPager滑动切换
查看>>