-1

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

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

我努力了:

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

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

4

3 回答 3

1

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

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

但也许您想将该contactName字段声明为比Object?

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

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

于 2012-08-15T04:11:03.553 回答
0

我怀疑您的类没有无参数构造函数。如果您定义了带参数的构造函数,则将其添加到您的NameAddress类中:

public NameAddress() {
}

对“电话号码”做同样的事情

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

于 2012-08-15T04:31:03.283 回答
0

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

当你说:

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

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

这是一个例子。只要setS()传递了一个字符串,此代码就可以正常工作:

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;
    }
}
于 2012-08-15T05:01:45.443 回答