【问题标题】:protected access java issue受保护的访问java问题
【发布时间】:2017-03-25 05:41:16
【问题描述】:

为什么下面的代码会出现编译错误?

public class A
{    
   protected int _i;
   public A(int i)
   {
       _i=i;
   }
   public boolean equals(Object other)
   {
       System.out.print("A ");
       return ((other!=null) && (_i==other._i));
   }
}

Object 类被认为是A 的父类,即超类和子类。那么Object 类为什么不能访问受保护的变量呢?

【问题讨论】:

  • 专利不从子代继承,反之亦然
  • 对象是 Java 中的超类,在您的情况下,超类对象不能使用 A 类受保护的数据成员。
  • @Art - 你得到的所有回复都在说同样的事情:父子可见性朝着一个方向发展。这个link 解释了原因。问:有意义吗?
  • VehicleCarBoatAirplaneOxCart 和数百个其他类的父级。 Vehicle 是否应该知道其所有子类的属性,甚至是那些尚未考虑过的子类(即TimeMachineTeleporter)?

标签: java protected


【解决方案1】:

你想错了方向:(

“A”的子类“B”将能够看到 A 的受保护成员。

超类“对象”不能。

查看此链接:

In Java, why super-class method can't access protected or private methods/variables from sub-class instance?

【讨论】:

    【解决方案2】:

    这根本不是访问修饰符的问题。即使您将int _i 声明为public,您也会收到相同的错误。

    问题是子类能够看到父类的所有成员,但父类将无法看到子类的任何成员。这就是other._i 无效的原因。

    【讨论】:

      猜你喜欢
      • 2011-04-02
      • 1970-01-01
      • 2012-09-27
      • 2010-10-18
      • 2013-04-03
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      相关资源
      最近更新 更多