Java 扩展JFrame-如何;超级";关键词工作?

Java 扩展JFrame-如何;超级";关键词工作?,java,object,jframe,super,Java,Object,Jframe,Super,我创建了一个扩展了JFrame的类,并在我的类构造函数中设置了标题,我可以使用: super("title"); setTitle("title"); 或者只创建一个JFrame对象,即: JFrame f = new JFrame("title); 编译器如何区分所有这些,从而得出相同的结论?我知道super用于调用超类中的重写方法,但是它如何具体知道调用setTitle方法呢 我的想法是super调用JFrame类的构造函数,并且只有一个构造函数接受字符串参数,所以它基本上在做: JFr

我创建了一个扩展了
JFrame
的类,并在我的类构造函数中设置了标题,我可以使用:

super("title");
setTitle("title");
或者只创建一个
JFrame
对象,即:

JFrame f = new JFrame("title);
编译器如何区分所有这些,从而得出相同的结论?我知道super用于调用超类中的重写方法,但是它如何具体知道调用
setTitle
方法呢

我的想法是super调用
JFrame
类的构造函数,并且只有一个构造函数接受字符串参数,所以它基本上在做:
JFrame f=newjframe(“title”);
,无需显式创建对象

这是真的吗?如果不是,有人能解释super到底在做什么,以及为什么
setTitle
不需要对象引用吗


干杯

如果查看Frame对象,调用super(JFrame)意味着将参数传递到JFrame中,因此
JFrame jf=new JFrame(“Title”);
super(“Title”);
相同(假设super type是JFrame)

它具体如何知道调用setTitle方法

单独调用
super()
将调用超类构造函数

调用
setTitle()
java会查看当前类中是否存在该方法。如果不存在,则会查看父类

如果您已重写
setTitle()
,则从子类中调用
setTitle()
将调用该类的方法。如果您调用
super.setTitle()
它将调用super类中的
setTitle()
方法。

当您在超类中调用
super(“title”)
时,您会告诉Java“要实例化我的对象,首先在接受字符串参数的超类上调用构造函数”。如果没有显式的超调用,则会调用无参数构造函数(与
object()
构造函数的情况一样)。结果表明,JFrame构造函数使用其参数调用
setTitle

当您调用
setTitle(“title”)
时,这是隐含的,因此您调用对象上的方法。如果您没有重写它,则调用超类实现

  • newjframe(“title”)
    调用
    JFrame
    的构造函数。它可能会调用
    setTitle()
    (但可能不会),也可能只是设置用于保存标题的内部变量

  • super.setTitle()
    只是一个方法调用。如果您重写了
    setTitle()
    ,它将忽略您的定义,并在超类上调用相同的方法。它通常用于“链接”到超类的方法

  • super(“title”)
    只能作为构造函数的第一行调用。它不是方法调用。它调用超类中的特定构造函数,构造该对象,然后继续使用构造函数代码。这是所有构造函数的工作方式。如果不指定构造函数,则为无参数构造函数(
    super()
    )将自动调用


  • 谢谢。你提到“如果你看框架对象”,我在哪里可以看到这个?如果这是一个愚蠢的问题,很抱歉。你说“在JFrame中假设超级类型”是什么意思?假设超级类型是JFrame意味着有问题的类实现了JFrame。如果你键入JFrame jf=new JFrame();在eclipse和mac命令中+单击单词JFrame(在窗口控件中+单击[非右键单击])它将带您了解JFrame在java中实际声明的位置。我将在一分钟内放一个屏幕截图-这是我在control+click时得到的结果。我相信我以前也用过同样的错误尝试过这一点。您有idk/jre吗?您使用的是netbeans还是eclipseMost最详细的答案对我很有帮助。我不知道super()是专门用于构造函数调用的,但是现在有了意义,super()=构造函数调用,super.methodName()调用超类中被重写的方法。非常感谢“调用super()本身将调用超类构造函数”。有些事情我不知道,我认为它也与方法有关。非常感谢。