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

这个和超级java

诸正谊
2023-03-14
问题内容

this而且super不是关键字吗?那么我该如何使用它们将参数传递给构造方法呢?简而言之,两者都可以表现出如此独特的行为吗?


问题答案:

你是正确的,这两个thissuper是关键字。在Java语言规范定义明确他们必须的行为。简短的答案是这些关键字的行为特别,因为规范说它们必须这样做。

根据规范,this可以使用主表达式(仅在某些地方)或在显式构造函数调用中使用。

关键字this只能在实例方法,实例初始值设定项或构造函数的主体中,或在类的实例变量的初始值设定项中使用。如果它出现在其他任何地方,则会发生编译时错误。

因此,您可以this用作函数的参数,以将引用传递给当前对象。但是请注意,您不能super以不同于主要表达式的方式使用:

public class Program
{   
    void test(Program p) {}

    void run() { test(super); }

    public static void main(String[] args)
    {
        new Program().run();
    }
}

结果:

Program.java:5: '.' expected
    void run() { test(super); }

super.foo尽管可以使用,因为这在15.11中定义为有效:

FieldAccess:
    Primary . Identifier
    super . Identifier
    ClassName .super . Identifier

该规范还对如何使用super施加了限制:

使用关键字super的特殊形式仅在实例方法,实例初始化器或构造函数中或在类的实例变量的初始化器中有效;在完全相同的情况下,可以使用关键字this(第15.8.3节)。



 类似资料:
  • 问题内容: 在Java中,是否可以以始终执行“本地定义”版本而不是子类的重写版本的方式调用可重写方法?即有没有类似的引用此类而不是超类的? 让我给出一个代码示例,希望可以清楚地说明我要执行的操作: 如果这样做,它将调用中定义的方法,该方法将被覆盖以打印“ B的Foo”。 有没有一种方法可以强制该方法调用而不是中定义的方法?就像我可以使用在调用中定义的方法?不幸的是,使用仍然会调用子类的版本。甚至类

  • 只是一个关于继承的理论问题。 假设我有一个类“GamePanel”,它扩展了JPanel。 我知道在课堂上,如果我调用,它将调用父类(JPanel)绘制方法。 但是如果我创建一个对象GamePanel,它不应该继承所有的JPanels方法吗?那么在这种情况下,为什么不工作?当前对象应该能够访问该方法,对吗? 如果没有,为什么

  • 我一直在尝试练习一些java MCQ,但没能得到这一个,谁能解释一下输出是怎样的- 而不是

  • 问题内容: 尝试在Linux上没有SU权限的情况下安装/更新软件包时遇到错误。 解决问题的 简单 方法是execute ,但是我不确定这是否是一个好主意。 最好的方法是成为文件夹的所有者,正如我在StackOverflow的问题和博客文章中发现的那样。 我的问题是:为什么以SU身份运行不是一个好主意? 问题答案: 运行超级用户具有运行某些不可信代码作为超级用户的风险,其可以与你的整个系统潜在的混乱

  • 我有两个关于Maven pom的一般性问题 在超级pom中,它被称为

  • 问题内容: 我在使用Python super()和继承和属性时遇到了一个非常奇怪的问题。一,代码: 这很好。但是,我想要的(对我来说似乎是Pythonic) 即使不起作用 得到很好的价值。在这种情况下,x是同时定义了fset和fget的超类的属性。那为什么不起作用呢? 问题答案: 我试图找到正确的语言来支持这种行为的原由,以免给您一个“因为它就是”答案……但是似乎这个问题已经被问了不止一次了,并且