Java 继承与类加载:Parent 和 Child 类的详解

本文将以 Parent 和 Child 两个类为例,深入讲解 Java 中的继承机制,分析类加载过程中的执行顺序,以及在继承关系中如何重写父类方法。

Parent 类

public class Parent {
    final static Integer field_0 = 0;
    final static int field_33 = 66;
    final static String field_1 = 'static parent variable(父类静态成员常量 final修饰 String)';
    final String field_2 = 'parent variable(父类成员变量,仅有final修饰)';
    //无final修饰
    static Integer noFinal1 = 99;
    static String noFinal2 = 'noFinal static parent';
    String noFinal3 = 'noFinal parent 成员变量';

    static {
        System.out.println('parent static block1(父类静态代码块1)');
    }

    public static void methodParent1() {
        System.out.println('parent static method 1父类静态方法1 子类中无同名实现');
    }

    public static void methodParent2() {
        System.out.println('parent static method 1父类静态方法2 静态方法不能在子类中重写');
    }

    public void methodParent3() {
        System.out.println('parent method 3 父类成员方法3 子类无同名实现');
    }

    public void methodParent4() {
        System.out.println('parent method 4 父类成员方法4 子类有同名实现');
    }

    public Parent() {
        System.out.println('parent init父类构造器方法');
    }
}

Child 类

class Child extends Parent {
    final static Integer field_0 = 10;
    final static String field_1 = 'static child variable子类静态成员常量有fina修饰 且与父类同名';
    final String field_2 = 'child variable子类成员变量,有final修饰,与父类同名';
    //无final修饰
    static Integer noFinal1 = 900;
    static String noFinal2 = 'noFinal static parent 与父类同名';
    String noFinal3 = 'noFinal parent 成员变量 与父类同名';
    String noFinal4 = 'noFinal parent 成员变量 与父类不同名';

    static {
        System.out.println('child static block1子类静态代码块1');
    }

    public static void methodChild1() {
        System.out.println('child static method 1 子类静态方法1');
    }

    @Override
    public void methodParent4() {
        System.out.println('child method 2 子类成员方法1 对应重写父类成员方法4');
    }

    public void methodChild2() {
        System.out.println('子类自身的成员方法2');
    }

    public Child() {
        System.out.println('child init 子类构造方法');
    }
}

运行过程

  1. 类加载: 程序运行时,首先加载 Parent 类,执行其中的静态成员变量和静态代码块。
  2. 继承关系: Child 类继承自 Parent 类,因此 Child 类也能够访问 Parent 类中的所有 public 成员。
  3. Child 类加载: 接着加载 Child 类,并执行其中的静态成员变量和静态代码块。
  4. 对象创建: 当创建 Child 类对象时,会先执行 Parent 类的构造函数,然后再执行 Child 类的构造函数。

关键点

  1. 静态成员变量和静态代码块 只会在类加载时执行一次,与对象创建无关。
  2. 成员变量和成员方法 则与对象创建有关,每个对象都会拥有自己的成员变量和成员方法副本。
  3. 重写方法: Child 类重写了 Parent 类中的 methodParent4() 方法,在调用该方法时,会优先执行 Child 类中的方法实现。
  4. 子类自身方法: Child 类拥有自身独有的方法 methodChild2(),无法被 Parent 类访问。

小结

本文通过示例代码和详细的解释,阐述了 Java 中的继承机制和类加载过程,以及静态成员和非静态成员的执行顺序,相信对读者理解 Java 继承和类加载过程有所帮助。

Java 继承与类加载:Parent 和 Child 类的详解

原文地址: http://www.cveoy.top/t/topic/m5CX 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录