如何在另一个类的另一个实例方法中引用实例方法?

时间:2014-04-12 19:47:59

标签: java oop object

试图找出它并且无法在任何地方找到它。如果一个类在另一个类的方法中实例化,该类在第三个类中实例化,该类在main方法中实例化。我知道最后的陈述是漫长而令人困惑的。所以附上代码以便更好地理解。

public class B {
private String name;
public void setname(String name){
    this.name=name;
}
public String getname(){
    return name;
}

}

public class C {void method2(){
B b = new B();
b.setname("BBB");

}

}

public class A {void method1(){
B b=new B();
b.setname("AAA");
C c= new C();

System.out.println(b.getname());

}

}

public class Testcase {

/**
 * @param args
 */
public static void main(String[] args) {
    A a=new A();
    a.method1();

}

}

如何从对象c中实例化的对象b引用getname()方法。

2 个答案:

答案 0 :(得分:0)

将您的班级实例设置为公开,如下所示:

public B b = new B();
public C c = new C();

现在您可以像这样访问它们:

a.b.c.getName();

答案 1 :(得分:-1)

将类实例设置为public是错误的,因为:

  • 所有公开的东西都必须经过测试。
  • 打破封装
  • 有更好的方法可以做到这一点

您需要做的是添加wrapper method

例如在C类中:

public class C {
    private B b;
    void method2(){
        b = new B();
        b.setname("BBB");
    }
    public void setName(String newName)
    {
         b.setname(newName);
    }
    public String getName()
    {
         return b.getName();
    }
}

公共实例方式:

public class C {
    public B b = new B();
    void method2(){
        b.setname("BBB");
    }
}

public class A {
    public C c = new C();
    public B b =new B();
    void method1(){
        b.setname("AAA");

        System.out.println(b.getname());
    }
}
public class Testcase {
    public static void main(String[] args) {
        A a=new A();
        a.c.b.setname("tralala");

    }
}