我创建了3个具体的类,前两个已经完成并且工作正常。第三个需要其他两个类的新对象的私有成员。如何为私人会员编写此代码?我现有的类是NameAddress和PhoneNumber,新的类名为ContactDetails,两个已经创建的类是NameAddress和PhoneNumber(我的私有成员需要后者中的一个和后者中的一个)
我试过了:
public class ContactDetails{
private Object contactName = new NameAddress();
private Object mobile = new PhoneNumber();
private Object home = new PhoneNumber();
}
但这在编译器中不起作用并引发错误。帮助将不胜感激,我似乎无法找到正确的语法。
答案 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;
}
}