java继承后构造函数的继承机制
2016-02-19 11:48
337 查看
最近在复习一些java基础的东西。发现继承后构造函数的继承很有意思,所以进行了一下测试:
测试1-如果父类不主动创建构造函数则子类创建构造函数没有限制。
测试2-如果父类创建不含参构造函数则子类创建构造函数没有限制且先执行父类的构造函数。
测试3-如果父类创建含参构造函数则子类创建构造函数需要先super父类函数且先执行父类的构造函数。
测试4-如果父类创建多个含参构造函数则子类创建构造函数需要先super指定的父类函数(如父类包含无参构造函数则子类可以不super父类函数同测试2)。
子类
结果
子类
结果
子类
结果
子类
结果
2、如果子类需要继承父类的含参构造函数则需要使用super命令(如果父类包含多个含参构造函数则依据参数使用super命令)
3、如果父类建立了构造函数且都含有参数,则子类必须使用super命令。
测试1-如果父类不主动创建构造函数则子类创建构造函数没有限制。
测试2-如果父类创建不含参构造函数则子类创建构造函数没有限制且先执行父类的构造函数。
测试3-如果父类创建含参构造函数则子类创建构造函数需要先super父类函数且先执行父类的构造函数。
测试4-如果父类创建多个含参构造函数则子类创建构造函数需要先super指定的父类函数(如父类包含无参构造函数则子类可以不super父类函数同测试2)。
测试1-如果父类不主动创建构造函数则子类创建构造函数没有限制
父类public class Father { }
子类
public class Child extends Father { public Child(String a, int b) { System.out.println("这是子类的构造函数"); } public static void main(String[] args) { Child t3 = new Child("xx",1); } }
结果
这是子类的构造函数
测试2-如果父类创建不含参构造函数则子类创建构造函数没有限制且先执行父类的构造函数
父类public class Father { public Father() { System.out.println("这是父类的构造函数"); } }
子类
public class Child extends Father { public Child(String a, int b) { System.out.println("这是子类的构造函数"); } public static void main(String[] args) { Child t3 = new Child("xx",1); } }
结果
这是父类的构造函数 这是子类的构造函数
测试3-如果父类创建含参构造函数则子类创建构造函数需要先super父类函数且先执行父类的构造函数
父类public class Father { public Father(int a) { System.out.println("这是父类的构造函数"); } }
子类
public class Child extends Father { public Child(String a, int b) { super(1); System.out.println("这是子类的构造函数"); } public static void main(String[] args) { Child t3 = new Child("xx",1); } }
结果
这是父类的构造函数 这是子类的构造函数
测试4-如果父类创建多个含参构造函数则子类创建构造函数需要先super指定的父类函数(如父类包含无参构造函数则子类可以不super父类函数同测试2)
父类public class Father { public Father(int a) { System.out.println("这是父类的构造函数1"); } public Father(String b) { System.out.println("这是父类的构造函数2"); } }
子类
public class Child extends Father { public Child(){ super("a"); System.out.println("这是子类的构造函数调用2"); } public Child(String a, int b) { super(1); System.out.println("这是子类的构造函数调用1"); } public static void main(String[] args) { Child t3 = new Child("xx",1); Child t4 = new Child(); } }
结果
这是父类的构造函数1 这是子类的构造函数调用1 这是父类的构造函数2 这是子类的构造函数调用2
综上测试得出如下结论:
1、如果父类不主动创建构造函数或者父类有无参的构造函数则子类可以不考虑父类的构造函数。2、如果子类需要继承父类的含参构造函数则需要使用super命令(如果父类包含多个含参构造函数则依据参数使用super命令)
3、如果父类建立了构造函数且都含有参数,则子类必须使用super命令。
相关文章推荐
- spring 中<context:annotation-config />和<context:component-scan base-package="com.*" >
- eclipse构建maven的web项目
- JAVA数组中的各元素是对象吗?
- 浅出Java Socket 编程
- Spring AOP进行日志记录,管理
- RxJava 入门引导
- Java中 == equal hashcode
- JAVA操作properties文件
- JDK自带工具keytool生成ssl证书
- java 中去掉空格的方法
- Java读取ini文件
- 获取Java系统相关信息
- eclipse,android虚拟机按键不可用解决方法hardware buttons not enabled in avd
- 5个强大的Java分布式缓存框架推荐
- SpringMVC使用@ResponseBody时返回json的日期格式处理为指定格式
- java中用enum实现单例模式
- Spring Framework Reference,Documentation,spring英文文档.pdf 官方文档
- java继承中,成员变量的覆盖
- java collection
- Java String.trim () 函数的使用