先准备3个逐层继承的类User1,User2,User3
User2继承User1,User3继承User2
分别在类中准备构造函数,普通初始化块,静态代码块
public class User1 {
public User1(){
System.out.println("User1的构造函数调用");
}
{
System.out.println("User1的普通初始化块");
}
static{
System.out.println("User1的静态初始化块");
}
}
public class User2 extends User1 {
public User2(){
System.out.println("User2的构造函数调用");
}
{
System.out.println("User2的普通初始化块");
}
static{
System.out.println("User2的静态初始化块");
}
}
public class User3 extends User2{
public User3(){
System.out.println("User3的构造函数调用");
}
{
System.out.println("User3的普通初始化块");
}
static{
System.out.println("User3的静态初始化块");
}
}
public class Main {
public static void main(String[] args){
User3 user3 = new User3();
}
}
执行结果
User1的静态初始化块
User2的静态初始化块
User3的静态初始化块
User1的普通初始化块
User1的构造函数调用
User2的普通初始化块
User2的构造函数调用
User3的普通初始化块
User3的构造函数调用
有参构造的情况:
先扩展代码:
public class User1 {
private String name;
public User1(){
System.out.println("User1的无参构造函数调用");
}
public User1(String aname){
this.name = aname;
System.out.println("User1的有参构造函数调用");
}
{
//System.out.println("User1的普通初始化块");
}
static{
//System.out.println("User1的静态初始化块");
}
}
public class User2 extends User1 {
public String name;
public User2(){
System.out.println("User2的无参构造函数调用");
}
public User2(String aname){
this.name = aname;
System.out.println("User2的有参构造函数调用");
}
{
//System.out.println("User2的普通初始化块");
}
static{
//System.out.println("User2的静态初始化块");
}
}
public class User3 extends User2{
public String name;
public User3(){
System.out.println("User3的无参构造函数调用");
}
public User3(String aname){
this.name = aname;
System.out.println("User3的有参构造函数调用");
}
{
//System.out.println("User3的普通初始化块");
}
static{
//System.out.println("User3的静态初始化块");
}
}
public class Main {
public static void main(String[] args){
//User3 user3 = new User3();
User3 user3 = new User3("李云龙");
}
}
执行结果
User1的无参构造函数调用
User2的无参构造函数调用
User3的有参构造函数调用
显然执行的只有创建的User3执行了有参构造,User2和User1执行的都是无参构造,他们并没有自动调用父类的有参构造。
但如果对代码稍作修改,在有参构造前添加super(anme),即可执行父类的有参构造了
public User3(String aname){
super(aname);
this.name = aname;
System.out.println("User3的有参构造函数调用");
}
实验结束
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。