Java 子类调用父类构造器与静态代码块

这个继承与静态代码块面试考试简直是必须出现的,今天总结一下,整理思路。

在effective Java中关于继承的讨论,有关于构造器的讨论,结论是你超类(父类)好好设计,不要被继承你的子类增加一些不必要的负担。同样继承的时候也要注意,尤其是重写方法时可能由于勾走爱情造成一些可能始料不及的问题。

首先我们要了解一下类(子类)加载的过程:

Class Son extend Father
一 加载顺序
子类son加载的过程

第一步骤:
静态块加载(父类静态块加载 ——》 子类静态块加载)
第二步骤:
构造器加载 (父类无参构造器 ——》 静态构造器(有参或者无参) )

代码:

public class Test01 {
	public static void main(String[] args) {
		//创建子类
		Son son = new Son();
		System.out.println("==========");
		Son son2 = new Son("son");
	}
}
 
class Father{
	public Father() {
		System.out.println("father的无参构造方法");
	}
}
 
class Son extends Father{
	private String name;
	public Son() {
		System.out.println("son的无参构造方法");
	}
	public Son(String name) {
		this.name = name;
		System.out.println("son的有参构造方法");
	}
}

在这里插入图片描述

public class Test01 {
	public static void main(String[] args) {
		//创建子类
		Son son = new Son();
		System.out.println("==========");
		Son son2 = new Son("son");
	}
}
 
class Father{
	public Father() {
		System.out.println("father的无参构造方法");
	}
	static {
		System.out.println("father的静态代码块");
	}
}
 
class Son extends Father{
	private String name; 
	static {
		System.out.println("son的静态代码块");
	}
	public Son() {
		System.out.println("son的无参构造方法");
	}
	public Son(String name) {
		this.name = name;
		System.out.println("son的有参构造方法");
	}
}

在这里插入图片描述

问题二 子类构造器加载
子类加载会在加载一下父类无参的构造方法,参见说上的打印日期的例子。

书上的例子,其实你了解上面的顺序,你就对这个结果一点也不疑问,书上讲这个就是告诉你在重写父类方法时,由于父类构造器先调用,如果父类构造器调用了你重写的方法,可能在子类加载时会出现一些状况外的结果,比如第一个为什么是null,告诉你继承的类不是简单一个extends就OK了,你要考虑方法的重写,子类加载父类会不会给子类挖坑。

package com.zp.eejava4;

public class Super {
    public Super(){
        ovarrideMe();
    }
    public void ovarrideMe(){

    }
}
package com.zp.eejava4;

import java.util.Date;

public final class Sub extends Super{
    private final Date date;

    Sub(){
        date = new Date();
    }

    @Override
    public void ovarrideMe() {
        System.out.println(date);
    }

    public static void main(String[] args) {
        Sub sub = new Sub();
        sub.ovarrideMe();
    }
}

猜你喜欢

转载自blog.csdn.net/FeiChangWuRao/article/details/89443707
今日推荐