繁体   English   中英

扩展JFrame-“ super”关键字如何工作?

[英]Extending JFrame - how does “super” keyword work?

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

super("title");
setTitle("title");

或只是创建一个JFrame对象,即:

JFrame f = new JFrame("title);

编译器如何与所有这些区别以得出相同的结论? 我知道super用于调用超类中的重写方法,但是如何特别知道调用setTitle方法呢?

我的想法是super调用JFrame类的构造函数,并且只有一个构造函数带有字符串参数,因此它基本上是在做: JFrame f = new JFrame("title);而没有显式创建对象。

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

干杯

  1. new JFrame( "title" )调用JFrame的构造函数。 它可能调用setTitle() (但可能不会调用),或者可能只是设置用于保存标题的内部变量。

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

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

如果查看框架对象,则调用super(JFrame)意味着您要将参数传递到JFrame中,因此JFrame jf = new JFrame("Title"); super("Title"); (假设超级类型是JFrame)

当您在父类中调用super("title")时,您告诉Java“实例化我的对象,首先在具有String参数的父类上调用构造函数”。 如果没有显式的超级调用,则将调用no-arg构造函数(与Object()构造函数一样)。 事实证明,JFrame构造函数使用其参数调用setTitle

调用setTitle("title") ,这是隐含的,因此您可以在对象上调用方法。 如果尚未覆盖它,则将调用超类实现。

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

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

当您调用setTitle() Java会查看该方法是否存在于当前类中。 如果没有,它将查看父类。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM