我目前正在开发一个程序,在我的子类中,我需要一个无参数构造函数,用空字符串初始化对象。
我尝试过使用super,我有setter和getter方法,但我一直得到“field Person.name不可见”。我得到这个地址和电话号码以及。
如何使其可见,并且我可以在不提供构造函数参数的情况下初始化对象?如果我做错了什么并需要修复某些内容,请告诉我(:
// Create a class named Person
public class Person {
// Fields: name, address, and phone number. (2 points)
private String name;
private String address;
private String phoneNumber;
// No argument constructor that initializes the object with empty strings for name, address, and phone. (2 points)
public Person () {
super();
this.name = "";
this.address = "";
this.phoneNumber = "";
}
// 3 argument constructor that initializes the object with a name, address, and a phone number. (2 points)
public Person2 (String name, String address, String phoneNumber) {
this.name = name;
this.address = address;
this.phoneNumber = phoneNumber;
}
// Getter/setter methods for each of the fields. (3 points)
// set/get name
public void setName (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
// set/get address
public void setAddress (String address) {
this.address = address;
}
public String getAddress () {
return this.address;
}
// set/get phone number
public void setPhoneNumber (String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber () {
return this.phoneNumber;
}
// toString method that returns a string for the name, address, and phone number (2 points)
// (you can override the toString method as part of a class which is pretty swag)
public String toString() {
return "Name: " + name + "\n" + "Address: " + address + "\n" + "Phone: " + phoneNumber;
}
}
// Create a subclass of Person named Customer
class Customer extends Person {
// A field for a customer number. (1 point)
private String customerNumber;
public Customer () {
// A no argument constructor that initializes the object with an empty string for the name, address, phone, and customer number. (2 points)
super(name, address, phoneNumber);
}
// A 4 argument constructor that initializes the object with a name, address, a phone number, and a customer number. (2 points)
public Customer2 (String name, String address, String phoneNumber, String customerNumber) {
this.name = name;
this.address = address;
this.phoneNumber = phoneNumber;
this.customerNumber = customerNumber;
}
// Getter/setter method for the customer number field. (1 point)
public void setCustomerNumber (String customerNumber) {
this.customerNumber = customerNumber;
}
// toString method that prints the information from the Person toString as well as the customer number (2 points)
public String toString() {
return "Name: " + name + "\n" + "Address: " + address + "\n" + "Phone: " + phoneNumber + "\n" + "Customer Number: " + customerNumber;
}
}
我不认为有任何实际需要在people类中调用超级构造函数。然而,在客户类的构造函数中,您应该只调用没有参数的超级构造函数。
编辑:或者你可以在声明时直接启动这些值,就像我上面的那个人说的。
另外,有点不相关,但是,你可以有一个构造函数,但是给参数默认值。所以你可以调用它,有参数和没有参数,而不需要重写它。
>
您不能访问或分配到任何其他类中的private
字段,但声明该字段的类除外。
不能用类名称以外的任何名称声明构造函数。因此,Person2和Customer2都不是有效的构造函数或方法。(方法需要返回类型!)
构造函数必须显式(通过super
调用)或隐式地在其超类中链接无参数构造函数。
基本上,您在超类中初始化私有字段的选择是使用super(...)
调用来链接传递值的超类构造函数或调用子类构造函数中的超类setter方法。
例如,Customer
中的4参数构造函数可以是:
public Customer (String name, String address,
String phoneNumber, String customerNumber) {
super(name, address, phoneNumber);
this.customerNumber = customerNumber;
}
或者
public Customer (String name, String address,
String phoneNumber, String customerNumber) {
super();
setName(name);
setAddress(address);
setPhoneNumber(phoneNumber);
this.customerNumber = customerNumber;
}
在我看来,前者更好。它更简洁易读。
Customer
中的toString()
方法不能直接引用人员的私有字段。它可以使用fields的getter。
如果字段被标记为私有访问,则只能从该类或其实例内部访问该字段。你应该使用get方法。或者,您可以获得toString
的结果,并在此基础上进行构建。
此外,所有构造函数都应该与类同名(没有添加“2”)。
public class Person {
private String name;
private String address;
private String phoneNumber;
public Person() {
this("", "", "");
}
public Person(String name, String address, String phoneNumber) {
this.name = name;
this.address = address;
this.phoneNumber = phoneNumber;
}
public void setName (String name) {
this.name = name;
}
public String getName () {
return this.name;
}
public void setAddress (String address) {
this.address = address;
}
public String getAddress () {
return this.address;
}
public void setPhoneNumber (String phoneNumber) {
this.phoneNumber = phoneNumber;
}
public String getPhoneNumber () {
return this.phoneNumber;
}
@Override
public String toString() {
return "Name: " + name + "\n" + "Address: " + address + "\n" + "Phone: " + phoneNumber;
}
}
// Create a subclass of Person named Customer
class Customer extends Person {
private String customerNumber;
public Customer () {
this("", "", "", "");
}
public Customer (String name, String address, String phoneNumber, String customerNumber) {
super(name, address, phoneNumber);
this.customerNumber = customerNumber;
}
public String getCustomerNumber() {
return customerNumber;
}
public void setCustomerNumber (String customerNumber) {
this.customerNumber = customerNumber;
}
@Override
public String toString() {
return super.toString() + "\n" + "Customer Number: " + customerNumber;
}
}
定义不可变类的策略表明 所有字段都应该是最终字段。 对于ex: 为什么一定要最终决定? 因为我没有给出setter方法吗?它不能改变。谢谢。
有没有可能在Avro模式中有一个可选字段(即该字段根本不出现在.json文件中)? 在我的Avro模式中,我有两个字段: 在我的JSON文件中,这两个字段可以存在也可以不存在。 但是,当它们不存在时,我会收到一个错误(例如,当我使用avro-tools命令行客户端测试这样的JSON文件时): 我理解,只要字段名存在于JSON中,它就可以是或值,但我要表达的是“如果这些字段名不存在,或者如果它们存在
问题内容: 因此,前几天我正在上一堂课,当我意识到它会生成以下 工作 代码时,使用Eclipse的方法来创建equals方法: t.privateInt .. ???? 应该是私人的!因此,我想除了私有,受保护,受包保护和公共之外,还有其他领域可见性。 那么这里发生了什么?这个怎么称呼? 有人在哪里使用呢? 这不是中断封装吗?如果班上没有变种人而我改变了该怎么办?C ++也会发生这种情况吗?这是一
类makitVerifications(models.Model): 类UserVerifyCountSerializer(序列化器。模型序列化器): UserVerifyCountSerializer_声明的_字段['makit_validate']=makitSerializer(只读=True) 类UserVerfiyCountViewSet(generics.ListCreateAPIVi
问题内容: 我在假设,如果你有一个包含一个Java集<>内(或在地图<>对于这个问题的关键)的对象,所使用的任何字段,以确定身份或关系(通过纠正,,等。)无法更改而不会导致对集合的操作未指定的行为?(编辑:正如在其他问题中提到的) (换句话说,这些字段应该是不可变的,或者您应该要求从集合中删除对象,然后进行更改,然后重新插入。) 我问的原因是我正在阅读《Hibernate Annotations参