0

我有两个班级AB. 在课堂上A我创建了一个对象B。从对象 x 中,我想访问数据成员onetwo. 是唯一的解决方案,将其作为参数传递

b=new B(one,two)

?. 我不想扩展,因为类A是框架,类B是面板。

class A
{
    private int one;
    private String two;
    private myMethod()
    {
        B x=new B();
    }
}
4

6 回答 6

1

有几种方法可以走(我将在下面讨论每一种)

  1. 一一传递参数
  2. 通过整个框架
  3. 提取一个接口并传递它

广告 1. 这是最简单的方法,只需使用类似的构造函数

public B(int one, String two) {
    ...
}

正如您已经提到的,如果参数数量很大,这很麻烦。


广告 2。这不是一个好主意。面板真的需要访问框架的所有属性吗?不,它没有。例如,您可以:

public B(MyFrame a) {
    ...
    a.setVisible(false);
}

这是绝对不希望的。此外,循环引用的问题在于您不能单独进行更改:对框架的更改可能会导致面板发生更改,反之亦然。


广告 3。这将是我的首选方法。您创建一个界面,提供您需要的功能

public interface MyInterface {
    public int getOne();
    public String getTwo();
}

然后让你的类A实现该接口:

public class A implements MyInterface {
    ...

    public int getOne() {
        return one;
    }

    public String getTwo() {
        return two;
    }
}

你知道将构造函数更改B

public B(MyInterface a) {
    // use a.getOne() and a.getTwo() to get your data
}

你仍然可以BAas创建

B b = new B(this);

三个主要优点是:

  1. 您只需传递一个包含所有必需数据的参数
  2. 你不会暴露A比需要更多的课程
  3. B不显式依赖于类A(仅在 interface 上MyInterface
于 2013-08-09T10:28:24.487 回答
1
class B
{
    private int one;
    private String two;
    public B(int one,String two) //constructor of B
    {
       this.one=one;
       this.two=two; 
    }

  // getter setters
}

如果您如上所述创建 B 类,则可以调用B b=new B(one, two);

于 2013-08-09T09:54:44.790 回答
1

如果您希望在课堂之外可以访问一和二,您可以 -

  1. 让他们公开
  2. 用公共属性(公共获取和私有集)包装它们

然后您可以将 a 的实例(例如通过使用 this 关键字)传递给 b 的构造函数;

于 2013-08-09T09:54:52.297 回答
1

如果 A 类和 B 类是单独的组件,那么恐怕您别无选择。

另一方面,如果 B 类在功能方面属于 A 类,则可以使 B 类成为 A 的内部类:

public class A {

    int one;

    class B {

        private void doSomething() {
            one = one + 1;   // inside B you can access memebers of A
        }
    }
}
于 2013-08-09T10:03:26.133 回答
0

另一种方法如下:

class B
{
   A a;
   public B(A a){
   this.a = a;
}
}

这将要求您具有类属性的公共访问器方法A

于 2013-08-09T10:00:20.730 回答
0

你可以像这样delcare

    class B
   {
        private int one;
        private String two;

     // getter setters methods
   }

电话表格Class A 's myMethod()应该像这样

private myMethod()
{
    A a = new A();
    B b = new B();
    b.setOne(A.one);
    b.setTwo(A.two);
}
于 2013-08-09T09:59:53.057 回答