Java 正在寻找“的解释(文档?)”;添加(新曲面())&引用;

Java 正在寻找“的解释(文档?)”;添加(新曲面())&引用;,java,object,Java,Object,我在网上找到了这段代码,它适用于我的应用程序。我正试图更彻底地了解它。我没有找到任何文档来解释“add(newsurface());”语句的用法。我明白它的作用,但我不明白的是: add()方法在前面没有“SomeObject”的情况下是如何工作的。它似乎假设add()方法是用于包含它的对象(SamConquedMethod)。我找不到任何关于如何或何时有效的文档 为什么“super.add(new Surface());可以工作,但“samdeccedmethod.add(new Surfa

我在网上找到了这段代码,它适用于我的应用程序。我正试图更彻底地了解它。我没有找到任何文档来解释“add(newsurface());”语句的用法。我明白它的作用,但我不明白的是:

  • add()方法在前面没有“SomeObject”的情况下是如何工作的。它似乎假设add()方法是用于包含它的对象(SamConquedMethod)。我找不到任何关于如何或何时有效的文档
  • 为什么“super.add(new Surface());可以工作,但“samdeccedmethod.add(new Surface());”失败?add()方法似乎是从组件继承而来的,SamConcedMethod是一个JFrame,它是一个组件
  • (new Surface())创建了一个“匿名类”,对吗
(下面是示例代码)

包testmain方法;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入javax.swing.JFrame;
导入javax.swing.JPanel;
导入javax.swing.SwingUtilities;
类表面扩展了JPanel{
私有空间绘制(图形g,整数x){
双xd=(双)x;
Graphics2D g2d=(Graphics2D)g;
//画线图的代码在这里
}
@凌驾
公共组件(图形g){
对于(int i=0;i<512;i++){
//super.paintComponent(g);//这会擦除每一行
doDrawing(g,i);
}
}
}
公共类samdeccedmethod扩展了JFrame{
公共SAMD方法(){
initUI();
}
私有void initUI(){
设定标题(“行”);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
添加(新曲面());
设置大小(650350);
setLocationRelativeTo(空);
}
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
@凌驾
公开募捐{
SamConcedMethod行=新的SamConcedMethod();
行。setVisible(true);
}
});
}
}
为什么“super.add(new Surface());可以工作,但“samdeccedmethod.add(new Surface());”失败

因为是
Container
上的一个实例方法,所以基本上,
samdeccedmethod
间接地是
Container
的一个子类。因此,
initUI
中的
add
调用隐式地
this.add(newsurface())
。您不能将其称为
samduckedmethod.add
,因为只有当它是静态方法时,它才会起作用

(new Surface())创建了一个“匿名类”,对吗

不,它只是在调用构造函数。该代码相当于:

Surface surface = new Surface();
add(surface);

您向我们展示的代码中唯一的匿名类型是在
main
中,它创建了一个新的匿名类,实现了
Runnable

谢谢,Jon。那很有帮助。
Surface surface = new Surface();
add(surface);