2013-12-22 32 views
0

据我所知,static,它可以调用静态方法,而无需存在对象的实例。因此,不要在该对象上创建对象并调用该方法,而只需在该类上调用该方法。关于Java中的静态方法的困惑

现在,我有一个类Main,它具有以下对象:public ScribbleCanvas myCanvas;。在ScribbleCanvas类中,我想访问Main-类的方法。

现在,既然已经有一个Main(因为叫做ScribbleCanvas)的实例,我该如何访问这个类的非静态方法?或者更好的问题 - 我推理中的错误在哪里?

+1

你确定已经有一个Main类的实例吗?你的代码在哪里?你有什么尝试? –

+0

你能提供更多细节吗?为什么你需要从这个类中调用Main方法? –

+0

'ScribbleCanvas'是班级的名字。这与实例的存在有什么关系? –

回答

1

您可以为ScribbleCanvas构建一个构造函数或设置器,它将参数当作Main的当前实例。

ScribbleCanvas sc = new ScribbleCanvas(this); 

sc.setMainClass(this); 

而且这些,你只引用一个字段的参数。

1

您可以将Main实例设置为myCanvas的成员并使用它。

1

下面的代码解释了你应该怎么做。对于Main类中的实例方法,testInstanceMethod被视为 示例。这种方法应该也

public class ScribbleCanvas{ 

private Main mainObject = null; 


public ScribbleCanvas(){ 

this.mainObject = new Main(); 
//Call instance method in mainObject (member instance) 
this.mainObject.testInstanceMethod(); 
} 

public void setMainObject(Main arg){ 
this.mainObject = arg; 
} 

public Main getMainObject(){ 
return this.mainObject; 
} 

} 

访问用于调用静态方法,你可以直接把类名,并使用点运算符等提供Main.testStaticMethod()的方法以及访问调用

免责声明:未经测试/编译

1

如果我理解你的问题,你想:

  • Main类的实例,让我们CA ll it myMain
  • 实例将有ScribbleCanvas类的一个实例,称为myCanvas
  • ScribbleCanvas实例(myCanvas)具有内myMain访问方法。

为了做到这一点,你可以:

  • 声明Main类型的成员中ScribbleCanvas,说callingMain
  • 包括ScribbleCanvas
  • 在构造函数中 Main类型(比如 paramMain)的参数
  • 在构造函数中,商店paramMaincallingMain
  • Main,传递this给构造
  • 在你的代码,你可以参考callingMain.method()

这是否帮助?