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()本身将调用超类构造函数”。有些事情我不知道,我认为它也与方法有关。非常感谢。