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

为什么我不能在静态上下文中使用“ super”变量,尽管“ super”是指父类而不是类实例,而不是“ this”?

应俭
2023-03-14
问题内容

我在说Java语言。

变量“ this”在类内部使用时,指的是该类的当前实例,这意味着您不能在静态方法中使用“ this”。

但是,“超”在类内部使用时,是指该类的超类,而不是超类的实例,这意味着您可以在静态方法中使用“超”。但是事实证明你做不到。

一个可能的解释是说“超级”也指的是超类的一个实例,但我不知道为什么它应该…


问题答案:

这是JLS中有关super关键字的部分:

http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.11.2

表单super.Identifier引用当前对象的名为Identifier的字段,但是将当前对象视为当前类的超类的实例。

该形式T.super.Identifier指的是与T相对应的词汇包围实例的名为Identifier的字段,但该实例被视为T的超类的实例。

在这两种情况下,很明显都需要一个实例对象。

而且,静态上下文与实例上下文有些不同,因为类不能覆盖静态方法,而只能将其隐藏。



 类似资料:
  • 我正在尝试使用Python、pygame和OOP从头开始构建一个乒乓球游戏(我知道,这不是使用OOP的最佳语言)。当前具有以下类结构: 游戏对象(对象)| |球(游戏对象)| |桨(游戏对象) 注:球扩展游戏对象 当我试图创建一个球,一个错误显示: 超级(gameDisplay)类型错误:超级()参数1必须是类型,而不是pyplay。表面 有人能帮我吗?

  • 问题内容: 对于有关辅助程序/实用程序类的这些简单问题,我从未找到好的答案: 为什么我要创建一个单例(无状态)而不使用静态方法? 如果对象没有状态,为什么需要一个对象实例? 问题答案: 通常,单例用于向应用程序引入某种 全局状态 。(说实话,通常不是很必要,但这是另一个话题。) 但是,在一些极端情况下,甚至 无状态 单例也可能有用: 您希望在可预见的将来用状态扩展它。 由于某些特定的 技术 原因,

  • 问题内容: 为什么将类实现为常规类而不是将 抽象方法实现为 抽象 类。 会不会带来任何问题?或以这种方式有什么用吗? 而且,该方法应该是一种非常特定的方法, 其功能不能由任何其他类实现 (如果我没记错的话)。因此,我想该关键字比其他任何方法都更适合此操作。 但是我可以重写此方法并根据需要使用它, 它显然只印了, 有人告诉你我会产生一个新线程吗? 除了使工程师取代您感到困惑之外,还有什么其他用途?

  • 我知道在Java中,静态方法和实例方法一样是继承的,不同的是,当它们被重新声明时,父实现是隐藏的,而不是重写的。好吧,这有道理。但是,Java教程指出 接口中的静态方法从不继承。 然而,

  • 问题内容: 我是一个相对较新的QA工程师,致力于学习Selenium(使用Java),并且我想使用页面对象为页面建模。 目前,我的页面对象类是静态变量(用于定位页面元素的对象)和静态方法(用于获取By对象并执行页面功能)的集合。这对我来说似乎是最简单的方法,因为我的方法不需要依赖任何实例变量,而只需依赖定位符。 我只是在测试代码中根据需要调用这些方法。 但是,我读到的有关页面对象的所有内容都涉及实

  • 我是科特林的新手。因此,我在Android Studio中创建了一个kotlin项目,并导入了片段ktx和活动ktx依赖项。在片段中,我右键单击片段,然后转到- 这是我的应用程序。梯度锉