写这篇博客的目的是因为在Android开发中我们经常要和基类(BaseActivity)打交道,但是付类和字类的关系你真的清楚吗?代码很简单先上一个父类
public class Parent {
public Parent() {
super();
System.out.println(" 调用父类的无参数的构造函数 ");
}
public Parent(String name) {
super();
this.name = name;
System.out.println(" 调用父类的有一个参数的构造函数 ");
}
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
然后一个子类继承于它:
public class Child extends Parent {
public Child()
{
// super();
System.out.println("---------:::调用子类的构造方法:::--------");
}
public Child(String name)
{
super(name);
System.out.println("---------:::调用子类的构造方法:::--------");
}
public Child(String name,String name2)
{
// super(name2);
System.out.println("---------:::调用子类两个形参的构造方法:::--------");
}
}
然后调用
public class ClientSys {
public static void main(String[] args) {
Parent parent;
Child child;
child = new Child("22","333");
System.out.println(" ----------------------------action---------------------------- ");
parent = new Parent();
}
}
输出的结果为:
调用父类的无参数的构造函数
---------:::调用子类两个形参的构造方法:::--------
----------------------------action----------------------------
调用父类的无参数的构造函数
根据现象我们得出的结论:
结论:
无论调用怎么样,只要调用了子类的构造函数,都会调用父类的构造方法并且执行顺序是—>正常情况(子类和父类的构造方法都是一样的),先执行父类,再执行子类的构造方法,
下面分情况讨论:
现在可以肯定的是:只要是子类初始化了,那么父类的构造函数必须调用,如果有形参相同的就调用形参相同的,否则就要考虑两种情况,如果子类的构造方法没有调用super()方法并且父类没有相同形参的构造方法,那么就会默认调用父类的默认的构造方法