将私有成员从另一个类中的对象中移出

时间:2012-08-15 04:06:14

标签: java

编辑:我粘贴了错误的代码已经更新了

我创建了3个具体的类,前两个已经完成并且工作正常。第三个需要其他两个类的新对象的私有成员。如何为私人会员编写此代码?我现有的类是NameAddress和PhoneNumber,新的类名为ContactDetails,两个已经创建的类是NameAddress和PhoneNumber(我的私有成员需要后者中的一个和后者中的一个)

我试过了:

public class ContactDetails{
  private Object contactName = new NameAddress();
  private Object mobile = new PhoneNumber();
  private Object home = new PhoneNumber();
}

但这在编译器中不起作用并引发错误。帮助将不胜感激,我似乎无法找到正确的语法。

3 个答案:

答案 0 :(得分:1)

除了缺少}关闭班级之外,我没有看到任何明显的语法错误:

public class ContactDetails {
    private Object contactName = new NameAddress();
} // ← here

但也许您想将contactName字段声明为比Object更有用的东西?

public class ContactDetails {
    private NameAddress contactName = new NameAddress();
}

如果这没有帮助,请准确告诉我们编译器错误消息是什么。

答案 1 :(得分:0)

我怀疑你的类没有no-args构造函数。如果您已定义了带参数的构造函数,请将其添加到NameAddress类:

public NameAddress() {
}

为“PhoneNumber”提供相同的功能

这应该消除编译器错误(但可能不会导致工作应用程序)

答案 2 :(得分:0)

只是预感,但我认为你可能误读了你的规格。

当你说:

  

第三个[class]需要拥有其他两个类的新对象的私有成员。

...然后这意味着您要声明并稍后实例化您班级中的两种不同对象类型。当您需要通过访问者访问它们时,您需要明确指出您要返回的类型。当您通过mutator修改它们时,必须具体说明您要修改的对象 - 除非您与此特定Object所代表的内容完全一致,否则您将面临风险丢失对象状态信息并导致程序出现异常行为。

这是一个例子。只要setS()传递一个String:

,此代码就可以正常工作
public class Test {
    private Object s = new String("Testing");

    public Object getS() {
        return (String) s;
    }

    public void setS(Object theS) {
        s = theS;
    }
}

...但如果我传入任何Object的子类(也就是说, 任何 实例化new),我会得到ClassCastException

缓解这种情况的正确方法是专门实例化/返回/传入一个字符串。

public class Test {
    private String s = new String("Testing");

    public String getS() {
        return s;
    }

    public void setS(String theS) {
        s = theS;
    }
}