代码块和继承的一道综合应用题:
class HelloA {
public HelloA(){
System.out.println("1.Hello A!父类构造方法");
}
{
System.out.println("2.i'm A class.父类非静态代码块");
}
static{
System.out.println("3.static A 父类静态代码块");
}
}
public class HelloB extends HelloA {
public HelloB(){
System.out.println("4.Hello B! 构造方法");
}
{
System.out.println("5.i'm B class.非静态代码块");
}
static{
System.out.println("6.static B 静态代码块");
}
public static void main(String[] args) {
System.out.println("7.---start---");
new HelloB();
new HelloA();
System.out.println("8.---end---");
}
}
运行结果如下:
知识点:
代码块:使用{}定义的一段代码**
一、代码块分类
1、定义在方法中的代码块我们把它叫——普通代码块
2、定义在类中的代码块我们把它叫——构造快
3、使用static定义的代码块我们叫——静态构造块
根据在不同的类中又分为:《1》主类静态构造块《2》非主类构造块
二、继承
<1>继承作用是规避大量相同代码的重复。子类可以直接继承父类的操作,可以实现代码的重用。子类最低也维持和父类相同的功能。子类可以进行功能的扩充。如在属性和方法的扩充。
<2>子类对象在进行实例化前一定会首先实例化父类对象。默认调用父类的构造方法后再调用子类构造方法
<3> 在进行继承的时候,子类会继承父类的所有结构。(包含私有属性、构造方法、普通方法)但是这个时候需要注意的是,所有的非私有操作属于显示继承(可以直接调用),所有的私有操作属于隐式继承.
三、执行顺序
<1>同一类中:静态块>构造块>构造方法
则执行顺序为:3——>2——>1
执行顺序:6——>5——>4
<2>在主类中:静态块优于main方法执行
执行顺序:6——>7——>5——>4
<3>继承中,先实例化父类,再执行子类。
执行顺序为:3——>6——>7——>2——>1——>——>5——>4
<4>静态块被调用一次之后,就不在被调用。
则执行顺序为:3——>6——>7——>2——>1——>——>5——>4——>2——>1——>8