Java 继承与类加载:Parent 和 Child 类的详解
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 子类构造方法');
}
}
运行过程
- 类加载: 程序运行时,首先加载 Parent 类,执行其中的静态成员变量和静态代码块。
- 继承关系: Child 类继承自 Parent 类,因此 Child 类也能够访问 Parent 类中的所有 public 成员。
- Child 类加载: 接着加载 Child 类,并执行其中的静态成员变量和静态代码块。
- 对象创建: 当创建 Child 类对象时,会先执行 Parent 类的构造函数,然后再执行 Child 类的构造函数。
关键点
- 静态成员变量和静态代码块 只会在类加载时执行一次,与对象创建无关。
- 成员变量和成员方法 则与对象创建有关,每个对象都会拥有自己的成员变量和成员方法副本。
- 重写方法: Child 类重写了 Parent 类中的 methodParent4() 方法,在调用该方法时,会优先执行 Child 类中的方法实现。
- 子类自身方法: Child 类拥有自身独有的方法 methodChild2(),无法被 Parent 类访问。
小结
本文通过示例代码和详细的解释,阐述了 Java 中的继承机制和类加载过程,以及静态成员和非静态成员的执行顺序,相信对读者理解 Java 继承和类加载过程有所帮助。
原文地址: http://www.cveoy.top/t/topic/m5CX 著作权归作者所有。请勿转载和采集!