Java:调用方法

时间:2011-04-08 16:47:02

标签: java

在Java中,我有类似的东西

public class A {
    private String title;
    public A () { 
    // do something
    }

    public void run () {
        B b = new B();
        b.run();
    }

    public void changeTitle(String newTitle) {
        this.title = newTitle;
    } 
}


public class B {
   public B() {
   // do something
   }
   public void run() {

   }
}

我的问题是在B的方法run()中,是否可以在A中调用方法changeTitle()来更改实例化B的A实例的标题?

由于

7 个答案:

答案 0 :(得分:1)

如果B在其构造函数中接受A类型,并且当您说新B时,传入'this'类似于

public void run () {
    B b = new B(this);
    b.run();
}

现在你有一份你正在使用的A对象的副本。

答案 1 :(得分:1)

B只能在A上调用方法,如果它包含对A实例的引用。您可以将A的实例传递给B来实现此目的。

public void run () {
    B b = new B(this);
    b.run();
}

public class B {
   private A a;
   public B(A a) {
       this.a = a;
       a.changeTitle("Ha!");
  }
}

答案 2 :(得分:0)

不确定。在A的构造函数中传递B的实例。

答案 3 :(得分:0)

只有在调用B的run()方法时将this作为参数传递,才能执行此操作。

答案 4 :(得分:0)

除非你安排B的实例知道他们应该做什么A的实例(例如,将其传递给B的构造函数并记住它)。

如果您正在执行此类操作,那么您应该考虑,例如,如果B的实例是由A的实例以外的其他内容创建的,那么您希望发生什么。

答案 5 :(得分:0)

没有。因为这样的B实例不知道是谁创造了它。

但是B为:

public class B {
   private A creator;

   public B(A creator) {
      this.creator = creator;
      // do something
    ...
  }

并在new B(this)中创建A.run(),B可以在其run()方法中调用creator.changeTitle("whatever")

答案 6 :(得分:0)

B是A的非静态内部类,你可以调用A的方法(并访问它的fieldes)。