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

Java内部类访问和最佳实践

袁志专
2023-03-14
问题内容

我知道内部类可以访问外部类中的所有内容(因为它是该类的成员),但是相反呢?

  1. 外部类是否可以访问内部类中的私有变量和方法?

  2. 我看过一些文章提到内部类应该是私有的,这样它们只能被外部类访问。这对内部类的可访问性有什么影响?

  3. 在涉及内部类时,处理访问级别的最佳实践是什么?我假设封装越多越好,但这是以牺牲可访问性为代价的吗?


问题答案:

有效的Java(第2版)第22项:“相对于非静态的较喜欢的静态成员类”更详细地介绍了此主题。

简要总结:

  1. 除非需要访问,否则内部类不应有权访问外部类实例,即内部类应static默认为。为了获得技术,Effective Java调用了这些 静态成员类 ,而不是 内部类 ,并使用术语 嵌套类 来涵盖静态和非静态版本。
  2. 外部类始终有权访问其内部类的成员,即使这些成员是private。这样,内部类只能将自身暴露给外部类。
  3. “内部阶级应该只为服务外部阶级而存在。”

就个人而言,我倾向于实现一个内部类,只要这样做允许内部类的构造函数为private,即当一个类只能从另一个(外部)类实例化时。任何其他封装,例如使整个内部类private都可以使用;但是html" target="_blank">public内部类是完全可以接受的。Java中有很多示例,例如AbstractMap.SimpleEntry



 类似资料:
  • 问题内容: 如何从内部类访问外部类? 我正在重写一种使它在不同线程上运行的方法。从内联线程中,我需要调用原始方法,但是当然只要调用就会变成无限递归。 具体来说,我在扩展BufferedReader: 这个地方给了我我找不到的NullPointerException。 谢谢。 问题答案: 像这样: 上面的测试在执行时显示:

  • 我正在制作SPA,并决定使用JWT进行身份验证/授权,我读过一些关于令牌与Cookies的博客。我理解cookie授权是如何工作的,也理解基本令牌授权是如何工作的。问题是,我看不出刷新令牌如何适合它,在我看来,它降低了安全性。让我解释一下,就像我看到的那样: 通过用户名验证用户时 > 服务器还需要不断地查找存储,以查看什么用户,cookie点。 通过用户名验证用户时 这很容易受到XSS(跨站点脚本

  • 问题内容: 这就是我现在正在做的。有没有更好的方法来访问超类? 我正在使用Google Web Toolkit进行编程,但是我认为这确实是一个通用的Java问题。 问题答案: 您可以使用所谓的qualified 。 [JLS 15.8.4。合格的](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.8

  • 问题内容: 我正在尝试创建一个JLabel数组,当单击它们时,所有这些标签都应该变为不可见。当试图通过需要访问用于声明标签的循环的迭代变量的内部类设置鼠标侦听器时,就会出现问题。代码是不言自明的: 我以为我可以通过使用内部方法中的(或代替)内部调用来克服此问题,但我一直无法弄清楚。 编译错误是:从内部类内部访问局部变量i;需要宣布为最终` 我敢肯定,答案一定是我从未想过的愚蠢之举,或者我犯了一些小

  • 我正在学习新的Eclipse 4 RCP平台,我刚刚遇到了一个有趣的问题。 假设我正在为应用程序中定义的MPart设计一个Part类。e4xmi: 我正在使用WindowBuilder创建用户界面,但我希望它没有任何行为代码,所以我构造了一个类来处理如下的交互: 这是一个很好的实践,还是我在这里重新发明轮子,e4已经有了一些解决方案?如果没有,我如何将这些类连接在一起?我希望避免在Eclipse上

  • 此代码将显示错误“android java访问来自内部类,需要声明为final” 如果您将变量设置为最终变量,或将变量设置为类字段,则错误将消失。 类字段和final关键字有什么不同?