解析:

  1. 在子类中,如果与父类中的静态变量或成员变量同名且有'final'修饰,会覆盖父类的同名变量。如果没有'final'修饰,则会在子类中新增一个同名变量,不会覆盖父类的同名变量。

  2. 在子类中,如果与父类中的静态方法或成员方法同名,不论是否有'@Override'注解,都不会覆盖父类的同名方法,而是在子类中新增一个同名方法。

  3. 子类的构造方法会先调用父类的构造方法,因此子类的初始化过程中会先输出'parent init父类构造器方法',再输出'child init 子类构造方法'。同时,父类的静态代码块也会先于子类的静态代码块执行。

输出结果:

parent static block1(父类静态代码块1) child static block1子类静态代码块1 parent init父类构造器方法 child init 子类构造方法

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父类构造器方法');
    }
}

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 子类构造方法');
    }
}
Java 继承:父类和子类变量、方法及代码块详解

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

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