【问题标题】:Can parent and child class in Java have same instance variable?Java中的父类和子类可以具有相同的实例变量吗?
【发布时间】:2010-08-17 09:27:41
【问题描述】:

考虑这些类:

class Parent {
 int a;
}

class Child extends Parent {
 int a; // error?
}

Child中的a的声明是否应该由于int a的多个声明而导致编译错误?

【问题讨论】:

    标签: java


    【解决方案1】:

    child.a 阴影(或隐藏parent.a.

    这是合法的 Java,但应该避免。我希望您的 IDE 可以选择对此发出警告。

    但是请注意,这只是一个问题,因为您已经向世界公开了一个变量。如果您确保所有变量一开始都是私有的(将方法的 API 与字段的实现分开),那么父母和孩子是否具有相同的字段名称并不重要 - 孩子不会无论如何都能看到父母的字段。如果将方法从子级移到父级,可能会引起混乱,并且通常不会很好地提高可读性,但比隐藏的情况要好。

    【讨论】:

      【解决方案2】:

      这称为阴影,可能会给开发人员带来问题。

      在你的情况下:

      Child child = new Child();
      child.a = 1;
      System.out.println(child.a);
      System.out.println(((Parent)child).a);
      

      会打印

      1
      0
      

      【讨论】:

        【解决方案3】:

        这有点像嫁给你的表弟;合法,但不建议。

        它可能导致各种令人困惑的行为,因为子类声明隐藏了父类声明。

        【讨论】:

          【解决方案4】:

          不会有任何编译错误或运行时错误。

          public class Parent {
          private String name;
          private int age;
          }
          
          public class Child extends Parent {
          String parent;
          public int age;
          }
          

          在这里,您将能够从 Main 类访问 child.age ...这是通过派生类的公共变量获得的唯一好处

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2015-10-07
            • 2017-02-18
            • 2013-01-10
            • 2018-05-06
            • 1970-01-01
            • 2014-11-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多