【问题标题】:Create anonymous class extending inner abstract class创建匿名类扩展内部抽象类
【发布时间】:2014-12-24 17:45:47
【问题描述】:

我有以下场景 - 一个包含内部抽象类的类:

class A {

   private int Afield;
   public void Amethod() { ... }

   protected abstract class InnerOfA {
       ...
       protected abstract void doSomething();
   }
}

现在在另一个类的方法中,我想创建一个 匿名类 扩展 InnerOfA:

class B {
   public void Bmethod(A instanceOfA)
   {
       A.InnerOfA instance = instanceOfA.new InnerOfA()
       {
           @Override
           protected void doSomething()
           {
                // Here I want to use the private fields and methods of A.
           }
       }
   }
}

但由于某种原因(我不明白),我不能在 doSomething 的覆盖内使用 AfieldAmethod。为什么会这样?匿名实例在内部应该仍然属于instanceOfA,因此应该能够访问它的内部。

【问题讨论】:

  • 重读private的定义。 B(及其匿名内部类)不应该能够访问private 成员。

标签: java class inner-classes


【解决方案1】:

私有字段/方法只能在它们被声明的类中访问(子类化不足以访问private)。

【讨论】:

    【解决方案2】:

    如果你定义

    public void Bmethod(final A instanceOfA)
    

    你可以打电话

    @Override
    protected void doSomething()
    {
        instanceOfA.Amethod();
    }
    

    但您无法访问Afield,因为它是私有的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      相关资源
      最近更新 更多