我有两个班级A
和B
. 在课堂上A
我创建了一个对象B
。从对象 x 中,我想访问数据成员one
和two
. 是唯一的解决方案,将其作为参数传递
b=new B(one,two)
?. 我不想扩展,因为类A
是框架,类B
是面板。
class A
{
private int one;
private String two;
private myMethod()
{
B x=new B();
}
}
有几种方法可以走(我将在下面讨论每一种)
广告 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
}
你仍然可以B
从A
as创建
B b = new B(this);
三个主要优点是:
A
比需要更多的课程B
不显式依赖于类A
(仅在 interface 上MyInterface
)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);
如果您希望在课堂之外可以访问一和二,您可以 -
然后您可以将 a 的实例(例如通过使用 this 关键字)传递给 b 的构造函数;
如果 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
}
}
}
另一种方法如下:
class B
{
A a;
public B(A a){
this.a = a;
}
}
这将要求您具有类属性的公共访问器方法A
你可以像这样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);
}