Java中子类继承父类,父子类静态代码块、构造代码块以及构造方法的执行次序

先贴上实例代码:

public class TestDemo{

    public static void main(String[] args){
        Son son = new Son();
    }

}

class Parent{

    {
        System.out.println("父类构造代码块");
    }

    static{
        System.out.println("父类静态代码块");
    }

    public Parent(){
        System.out.println("父类构造方法");
    }

}

class Son extends Parent{

    {
        System.out.println("子类构造代码块");
    }

    static{
        System.out.println("子类静态代码块");
    }

    public Son(){
        System.out.println("子类构造方法");
    }

}

首先我们来分析一下在JVM中该程序的运行次序:

       在我们的JVM中的,当我们运行程序的时候首先是调用main方法,main方法会进入栈中。

               此时我们实例化了一个对象【Son son = new Son】

       但是在这个程序中,有一个Parent父类,Son是Parent的子类并且继承它。

       由于静态代码块是在方法区中进行加载的,所以静态代码块的加载优先级大于对象的创建。所以父类和子类的静态代码块一定是先加载出来的。

       其次,由于Java有一个分层话初始化机制,所以Java会先加载父类对象,其次再加载子类对象

       构造代码块的代码执行优先级也是大于构造方法的。所以最终的执行次序为:

       父类静态代码块 - 子类静态代码块 - 父类构造代码块 - 父类构造方法 - 子类构造代码块 - 子类构造方法

### Java 子类继承父类成员方法的规则 在 Java 中,子类通过继承机制可以从父类获得其定义的方法。以下是关于子类如何继承父类成员方法的具体规则: #### 继承范围 子类可以继承父类中的 **public** 和 **protected** 成员方法[^1]。然而,父类中的 **private** 方法不会被子类直接继承,尽管可以通过反射技术间接访问这些方法[^2]。 #### 覆盖与重载 如果子类中存在与父类同名的方法,则会发生方法覆盖(Override)。此时,子类中的方法会替代父类中的方法,在运行时动态绑定到具体的实现版本。需要注意的是,覆盖的前提条件是方法签名完全一致,并且子类方法的访问修饰符不能更严格于父类方法[^3]。 另外,子类还可以在其内部定义新的方法来扩展功能,这属于方法重载(Overload),它并不影响父类已有方法的行为。 #### 构造方法特殊性 值得注意的一点是,构造方法不属于可被继承的内容之一。每当创建一个新的子类实例时,默认情况下都会先隐式调用父类的一个构造函数完成必要的初始化工作;如果没有显式的指定某个特定参数列表匹配上的超构建者,则默认尝试执行无参形式的那个[^4]。 ```java // 示例代码展示继承情况下的方法行为 class Parent { public void showInfo(){ System.out.println("This is parent info."); } } class Child extends Parent{ @Override public void showInfo(){ super.showInfo(); // 显示调用了来自Parent里的showInfo() System.out.println("And this is child additional information."); } public static void main(String[] args){ Child myChild = new Child(); myChild.showInfo(); } } ``` 以上程序片段展示了基本的概念应用例:`Child` 重新定义了 `showInfo()` 函数以增加额外的信息打印逻辑,同时保留原有部分的功能输出。 #### 总结说明 综上所述,Java 提供了一种强大而灵活的方式让开发者利用面向对象编程原则设计软件结构——即允许后代实体共享祖先特性的同时又能适当地调整或增强它们的表现形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值