在Java中,字段覆盖和隐藏是面向对象编程中的两个重要概念。在某些情况下,子类中的字段可能会覆盖父类中的相同字段;而在另一些情况下,子类中的字段可能会隐藏父类中的相同字段。
字段覆盖指的是当子类中的字段与父类中的字段具有相同的名称和类型时,子类中的字段会覆盖父类中的字段。子类的对象访问这个字段时,会访问到子类中的字段,无法访问到父类中的同名字段。
class A { int x = 1; } class B extends A { int x = 2; void printX() { System.out.println(x); // 输出2 System.out.println(super.x); // 输出1 } } B b = new B(); b.printX();
字段隐藏指的是当子类中的字段与父类中的字段具有相同的名称但不同类型时,子类中的字段会隐藏父类中的字段。子类的对象访问这个字段时,会访问到子类中的字段,无法访问到父类中的同名字段。
class A { int x = 1; } class B extends A { double x = 2.0; void printX() { System.out.println(x); // 输出2.0 System.out.println(super.x); // 输出1 } } B b = new B(); b.printX();
需要注意的是,虽然子类中的字段可以覆盖或隐藏父类中的同名字段,但在使用时应该尽量避免这种情况的发生,建议在子类中使用不同的字段名。