java继承:构造方法
2015-08-12 10:56
357 查看
子类继承父类,构造方法会默认先执行父类中无参的构造方法,在此之前声明一点,如果父类中有一个有参的构造方法,是不会给你生成无参构造方法的。
在实例化子类时,执行构造方法,先执行父类的构造方法(如果在第一行没指定,则会默认调用无参构造方法,如果没有无参构造方法,需在第一行用super指定一个父类的构造方法),即在实例化子类之前会先实例化父类。
只要类里有一个构造函数,就不会生成默认的无参构造函数。
举例子说明:
父类
子类:
`public class AA extends Base{
public AA(){
System.out.println(“AA无参数”);
}
public AA(int i){
System.out.println(“AA有参”);
}
}`
测试:
输出:
Base 无参数
AA无参数
Base 无参数
AA有参
结论:在子类第一行没指定父类构造方法,会默认调用父类无参构造方法,且在实例化子类之前会先实例化父类。
如果父类变成如下
输出:
AA无参数
AA有参
结论:此时父类会有一个自动生成的默认的无参构造函数,内容为空,子类构造函数第一行会先执行该函数,即先实例化父类。
如果只有一个有参的构造函数:
这个时候编译就会报错 。
结论:有一个有参的默认构造函数,则父类不会有无参默认构造函数,而在子类构造函数中的第一行没有指定父类的构造函数,默认调用父类无参构造函数,父类该没有,报错。
修改:在第一行子类第一行指定父类的构造方法。
输出:
Base 有参数
AA无参数
Base 有参数
AA有参
在实例化子类时,执行构造方法,先执行父类的构造方法(如果在第一行没指定,则会默认调用无参构造方法,如果没有无参构造方法,需在第一行用super指定一个父类的构造方法),即在实例化子类之前会先实例化父类。
只要类里有一个构造函数,就不会生成默认的无参构造函数。
举例子说明:
父类
[code]public class Base { public Base(){ System.out.println("Base 无参数"); } public Base(int i){ System.out.println("Base 有参数"); } }
子类:
`public class AA extends Base{
public AA(){
System.out.println(“AA无参数”);
}
public AA(int i){
System.out.println(“AA有参”);
}
}`
测试:
@Test public void te(){ AA aa=new AA(); AA a2=new AA(3); }
输出:
Base 无参数
AA无参数
Base 无参数
AA有参
结论:在子类第一行没指定父类构造方法,会默认调用父类无参构造方法,且在实例化子类之前会先实例化父类。
如果父类变成如下
public class Base { // public Base(){ // System.out.println("Base 无参数"); // } // public Base(int i){ // System.out.println("Base 有参数"); // } }
输出:
AA无参数
AA有参
结论:此时父类会有一个自动生成的默认的无参构造函数,内容为空,子类构造函数第一行会先执行该函数,即先实例化父类。
如果只有一个有参的构造函数:
[code]public class Base { // public Base(){ // System.out.println("Base 无参数"); // } public Base(int i){ System.out.println("Base 有参数"); } }
这个时候编译就会报错 。
结论:有一个有参的默认构造函数,则父类不会有无参默认构造函数,而在子类构造函数中的第一行没有指定父类的构造函数,默认调用父类无参构造函数,父类该没有,报错。
修改:在第一行子类第一行指定父类的构造方法。
[code]public class AA extends Base{ public AA(){ super(3); System.out.println("AA无参数"); } public AA(int i){ super(4); System.out.println("AA有参"); } }
输出:
Base 有参数
AA无参数
Base 有参数
AA有参
相关文章推荐
- javafx image zoom
- 【问题解决】Project facet Java version 1.7 is not supported.
- java设计模式之建造者模式
- JUC 原子类
- VS2015+Xamarin 打开Xaml报“Could not create the Java Virtual Machine” 解决方法
- spring无法找到静态资源
- java
- Java多线程学习笔记
- [java] 匿名内部类
- Java基础总结之各个模块重要知识点
- 【Java设计模式】· 策略模式(Strategy Pattern)
- Java解析XML 一.SAX 方式
- Java中成员方法与成员变量访问权限详解
- jdk 包 介绍
- Spring AOP
- 《Java实战开发经典》第四章4.8
- 《Java实战开发经典》第四章4.7
- java corba data type
- 《Java实战开发经典》第四章4.6
- 《Java实战开发经典》第四章4.5