解释下 Java 中的字段隐藏?


每当你继承一个超类,超类的成员的一个副本就会在子类中创建,并且你可以使用它的对象访问超类成员。

如果超类和子类具有同名实例变量,如果你使用子类对象访问它,则无论其类型如何,子类字段都会隐藏超类的字段。这种机制称为字段隐藏。

但是,由于它使代码变得复杂,因此不推荐字段隐藏。

示例

在以下示例中,我们有两个类:Super 和 Sub,它们相互扩展。它们都有两个同名字段(名称和年龄)。

当我们使用 Sub 的对象打印这些字段的值时,它将打印子类的值。

 在线演示

class Super{
   String name = "Krishna";
   int age = 25;
}
class Sub extends Super {
   String name = "Vishnu";
   int age = 22;
   public void display(){
      Sub obj = new Sub();
      System.out.println("Name: "+obj.name);
      System.out.println("age: "+obj.age);
   }
}
public class FieldHiding{
   public static void main(String args[]){
      new Sub().display();
   }
}

输出

Name: Vishnu
age: 22

不过,如果你需要访问超类的字段,你需要使用 super 关键字,如下所示:

示例

 在线演示

class Super{
   String name = "Krishna";
   int age = 25;
}
class Sub extends Super {
   String name = "Vishnu";
   int age = 22;
   public void display(){
      Sub obj = new Sub();
      System.out.println("Name: "+obj.name);
      System.out.println("age: "+obj.age);
      System.out.println("Name: "+super.name);
      System.out.println("age: "+super.age);
   }
}
public class FieldHiding{
   public static void main(String args[]){
      new Sub().display();
   }
}

输出

Name: Vishnu
age: 22
Name: Krishna
age: 25

更新于:2019 年 7 月 30 日

1K+ 浏览量

开启您的职业生涯

完成课程并获得认证

开始
广告