我在网上找到了这段代码,它适用于我的应用程序。我正在努力追溯并更彻底地理解它。我没有找到任何解释“add(new Surface());”用法的文档陈述。我明白它的作用,但我不明白的是:
- 如果没有“SomeObject”,add() 方法如何工作。在它的前面。似乎假设 add() 方法适用于包含它的对象 (SampleAddMethod)。我找不到任何关于如何或何时有效的文档。
- 为什么“super.add(new Surface()); 有效,但“”SampleAddMethod.add(new Surface());”有效失败?看来 add() 方法是从 Component 继承的,而 SampleAddMethod 是一个 JFrame,它是一个 Component。
- (new Surface()) 创建了一个“匿名类”,我的说法正确吗?
(下面是示例代码)
package testMainMethod;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
class Surface extends JPanel {
private void doDrawing(Graphics g, int x) {
double xd = (double) x;
Graphics2D g2d = (Graphics2D) g;
// Code to draw line image goes here
}
@Override
public void paintComponent(Graphics g) {
for (int i = 0; i < 512; i++) {
// super.paintComponent(g); // this erases each line
doDrawing(g, i);
}
}
}
public class SampleAddMethod extends JFrame {
public SampleAddMethod() {
initUI();
}
private void initUI() {
setTitle("Lines");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
add(new Surface());
setSize(650, 350);
setLocationRelativeTo(null);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
SampleAddMethod lines = new SampleAddMethod();
lines.setVisible(true);
}
});
}
}
最佳答案
Why does "super.add(new Surface()); work, but ""SampleAddMethod.add(new Surface());" fail?
因为add(Component)
基本上是 Container
上的实例方法 - 并且 SampleAddMethod
是 Container
的间接子类。因此,initUI
中的 add
调用隐式是 this.add(new Surface())
。您不能将其称为 SampleAddMethod.add
,因为只有当它是静态方法时,它才有效。
Am I correct that (new Surface()) creates an "anonymous class"?
没有。它只是调用一个构造函数。该代码相当于:
Surface surface = new Surface();
add(surface);
您向我们展示的代码中唯一的匿名类型位于 main
中,它在其中创建了一个实现 Runnable
的新匿名类。
关于java - 寻找 "add(new Surface());"的解释(文档?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19454434/