Java构造方法的继承机制
来源:互联网 发布:php 输出正三角形 编辑:程序博客网 时间:2024/06/05 20:21
1、如果类中没有构造方法,Java会给类自动添加一个无参的构造方法,即默认构造方法;如果定义了构造方法,则不会添加默认无参构造方法。
2、如果子类的构造方法没有通过super显式调用父类的构造方法,也没有通过this显式调用自身的其他构造方法,则系统会默认调用父类的无参构造方法。如果此时父类没有无参构造方法,则会编译出错。
3、如果子类的构造方法中通过super显式调用父类的有参构造方法,那么将执行父类相应的构造方法,而不执行父类的无参构造方法。
4、如果子类通过super显式调用父类的构造方法或者通过this显式调用自身的其他构造方法,那么super或者this必须是子类构造方法的第一条语句(但如果仅是通过this或super来访问成员属性则没有这个要求)。
public class FatherClass { public FatherClass() { System.out.println("我是父类的无参构造方法"); } public FatherClass(String str) { System.out.println("我是父类的有参构造方法,参数为" + str); }}public class ChildClass extends FatherClass { public ChildClass() { this(null); System.out.println("我是子类的无参构造方法"); } public ChildClass(String str) { System.out.println("我是子类的有参构造方法,参数为" + str); }}public class Test { public static void main(String[] args) { ChildClass childClass = new ChildClass(); }}
此时输出结果为:
我是父类的无参构造方法
我是子类的有参构造方法,参数为null
我是子类的无参构造方法
如果去掉父类的无参构造方法
public class FatherClass { // public FatherClass() { // System.out.println("我是父类的无参构造方法"); // } public FatherClass(String str) { System.out.println("我是父类的有参构造方法,参数为" + str); }}public class ChildClass extends FatherClass { public ChildClass() { this(null); System.out.println("我是子类的无参构造方法"); } public ChildClass(String str) { System.out.println("我是子类的有参构造方法,参数为" + str); }}
此时编译报错,在ChildClass的有参构造函数那里提示:
Implicit super constructor FatherClass() is undefined. Must explicitly invoke another constructor
将子类的有参构造方法修改如下:
public class FatherClass { // public FatherClass() { // System.out.println("我是父类的无参构造方法"); // } public FatherClass(String str) { System.out.println("我是父类的有参构造方法,参数为" + str); }}public class ChildClass extends FatherClass { public ChildClass() { this(null); System.out.println("我是子类的无参构造方法"); } public ChildClass(String str) { super(str); System.out.println("我是子类的有参构造方法,参数为" + str); }}public class Test { public static void main(String[] args) { ChildClass childClass = new ChildClass(); }}
此时的运行结果为:
我是父类的有参构造方法,参数为null
我是子类的有参构造方法,参数为null
我是子类的无参构造方法
或者去掉父类的有参构造方法,改为:
public class FatherClass { // public FatherClass() { // System.out.println("我是父类的无参构造方法"); // } // public FatherClass(String str) { // System.out.println("我是父类的有参构造方法,参数为" + str); // }}public class ChildClass extends FatherClass { public ChildClass() { this(null); System.out.println("我是子类的无参构造方法"); } public ChildClass(String str) { System.out.println("我是子类的有参构造方法,参数为" + str); }}public class Test { public static void main(String[] args) { ChildClass childClass = new ChildClass(); }}
此时运行结果为:
我是子类的有参构造方法,参数为null
我是子类的无参构造方法
在上面的方法中,系统自动为父类生成一个无参构造方法。
阅读全文
0 0
- Java构造方法的继承机制
- java 构造方法的继承
- JAVA构造方法的继承
- java构造方法的继承
- java 构造方法的继承
- java继承后构造函数的继承机制
- java[继承][构造方法]
- java继承:构造方法
- [java]继承--构造方法
- java 继承类的构造方法
- 【转载】java 构造方法的继承
- java的练习:继承中的构造方法
- Java构造方法的继承调用
- Java构造方法继承的一点理解
- java:12继承中的构造构造函数的编写方法
- 构造方法的继承
- 继承的构造方法
- 继承的构造方法
- redis主从复制
- python线程池示例
- Android 真机安装APP出错
- 推新网:南京南站猥亵女童目击者:看见她被摸了约5分钟
- JSON.parse()和JSON.stringify()
- Java构造方法的继承机制
- Swift通过协议实现AOP
- 滤波器的响应与延时
- UE4中的press,release与click的区别
- leetcode104. Maximum Depth of Binary Tree
- 文章标题
- UVa 362
- EasyUI支持属性的子属性,即(field.sonfield形式或者格式化程序形式)
- 使用Jersey创建RESTful服务