【问题标题】:Can an object call on a method in the class it was instanced?对象可以调用它被实例化的类中的方法吗?
【发布时间】:2020-11-21 18:14:04
【问题描述】:

基本上我有一个类的对象,我在另一个类中实例化。在另一个类里面我有一个我想从对象类内部调用的方法。有没有办法做到这一点?

public class ObjectClass{
   private int x;
   private int y;
   private Button button;

   public ObjectClass(int x,int y) {
       this.x = x;
       this.y = y;      
       button = new Button("");
       button.setOnAction(new EventHandler<ActionEvent>() {
           @Override public void handle(ActionEvent e) {
               stuff();
               //I want to access the method in FirstClass here
               
           }});
   }

   public void stuff() {
       //stuff
   }    
}



public class FirstClass{
   private ObjectClass object;
   private boolean change;

   public FirstClass() {
       change = 1;      
       object = new ObjectClass(3,3);
    
   }

   public void method() {
       this.change = 0;
   }    
}

此代码使用 javafx,但我的问题应该在没有它的情况下适用

【问题讨论】:

  • 这里定义的方法是instance方法。这意味着它们是在类的特定实例 上调用的。要在此上下文中调用FirstClass 的方法,您需要在其上调用该方法的FirstClassinstancenew FirstClass().method(); 对此很好。另一种选择是使方法static,这意味着它们不绑定到实例,而是(kind'a)绑定到类本身,并且可以在没有实例的情况下调用。在这种情况下,FirstClass.method(); 会起作用(如果你做到了static)。
  • 如果 FirstClass 的实例是在另一个 Main 类中创建的,有没有办法从 ObjectClass 访问该特定实例? @BeUndead
  • 你可以将它传递给你在那里的构造函数。 ObjectClass(int x, int y, FirstClass instance) { ... },然后在你想调用它的地方使用instance.method();。 (如果你没有在构造函数中调用它in,你可以将它作为一个字段存储在你的ObjectClass 中,并使用构造函数中的instance 设置该字段的值。)

标签: java object methods class-method


【解决方案1】:

不,你不能那样做;在某些时候实例化的“对象 A”(new A())与类型“B”(B b = new TypeB();)的“对象 B”之间没有关系,其中 TypeB 中有 new A() 行。因此,不,你不能在这里做你想做的事。

你可以做的是传递一个实例,例如FirstClass 并期望创建者(运行 new A() 的人)提供自己(this)作为例如A的构造函数:

class FirstClass {
    A makeNewA() {
        return new A(this);
    }
}

class A {
    private final FirstClass fc;

    public A(FirstClass fc) {
        this.fc = fc;
    }

    public void doSomethingCallingBackToFc() {
        this.fc.method();
    }
}

当然不能保证交给 A 的构造函数的 FirstClass 实例是同一个实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-25
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多