当前位置: 首页 > 面试题库 >

为什么用Java将私有内部类成员公开?

云浩然
2023-03-14
问题内容

如果仍然无法在包含类的外部访问它,则用Java声明一个私有内部类的成员的原因是什么?可以吗

public class DataStructure {
    // ...

    private class InnerEvenIterator {
        // ...

        public boolean hasNext() { // Why public?
            // ...
        }
    }
}

问题答案:

如果InnerEvenIterator该类没有扩展任何类或实现任何接口,那么我认为这是无稽之谈,因为没有其他类可以访问它的任何实例。

但是,如果它扩展或实现了任何其他非私有类或接口,则是有意义的。一个例子:

interface EvenIterator {
    public boolean hasNext();
}


public class DataStructure {
    // ...

    private class InnerEvenIterator implements EvenIterator{
        // ...

        public boolean hasNext() { // Why public?
            // ...
        }
    }

    InnerEvenIterator iterator;

    public EvenIterator getIterator(){
         return iterator;
    }

}


 类似资料:
  • 问题内容: 我观察到外部类可以访问内部类的私有实例变量。这怎么可能?这是演示相同代码的示例代码: 为什么允许这种行为? 问题答案: 内部类只是一种将真正属于原始外部类的功能完全分开的方法。当你有两个要求时,可以使用它们: 如果是在单独的类中实现的,那么外部类中的某些功能将最为清晰。 即使在单独的类中,该功能也与外部类的工作方式紧密相关。 鉴于这些要求,内部类可以完全访问其外部类。由于它们基本上是外

  • 访问级别修饰符如何改变内部私有类中成员的行为?我有这个密码 属性是私有的:我可以从Main访问它,但不能从Main外部访问它(因为Inner是私有的) 属性是public的:我仍然可以从Main访问它,但不能从Main外部访问它(因为Inner是private的) 我看不出有什么不同

  • 我正在装一个应用程序,它工作得很好。但当我使用 在OuterClass中,并通过

  • 问题内容: Java教程说,由于内部类与封闭类的实例相关联,所以它(内部类)本身不能定义任何静态成员。 对我来说很有趣,为什么内部类不能声明静态成员,例如某个字段,该内部类的实例可能会与同一内部类的其他实例共享这些成员?这仅仅是Java中必须被视为理所当然的事情的实现吗? 问题答案: 基本上只是一个任意决定。我们没有理由也 不可能 得到支持,但还算不上什么好的理由 来 支持它。只需在外部类中声明静

  • 为什么Java不允许在接口中使用私有成员?有什么特别的原因吗?

  • 我有一个Java类(),它使用内部构建器类(),作为构建的一部分访问私有变量,如下所示: 使用方法如下: 我试图利用Android Studio将Java代码迁移到Kotlin的能力,这给了我以下结果: 但是,编译失败,出现以下情况: 因为(如静态编程语言留档所述): 在Kotlin中,外部类看不到内部类的私有成员。 此代码在块中运行,其中: 我知道我可以对其进行重构,以避免尝试这种访问(更改外部