我在java抽象类下面。
public abstract class Base implements Serializable {
private static final long serialVersionUID = 2602178514139825116L;
private String id;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
public class MainRequest extends Base {
te static final long serialVersionUID = -1724534962722346709L;
private String key;
private String name;
public MainRequest(String id){
super.setId(id);
}
public MainRequest(String key, String name){
this.key = key;
this.name = name;
}
public String getKey() {
return key;
}
public String getName() {
return name;
}
}
我的MainRequest .java
班级是否正确?我还需要调用超类构造函数吗?对MainRequest.java的任何改进?
谢谢!
答案 0 :(得分:1)
对于这种情况Base
,无需abstract
类,只需使用interface
。
答案 1 :(得分:1)
在MainRequest(String key,String name)构造函数中,不需要使用super()构造函数。 您没有使用默认构造函数MainRequest(){},因此在参数化构造函数中提供super()是jre的责任。 你使用了serializable接口,它没有abstruct方法,所以在实现这个接口时,没有必要定义那个接口的abstruct方法。因为,它什么都没有。 (它被称为标记接口,旨在完成IO操作时的某些任务)。如果你没有在参数构造函数中传递id值,那么jre.default值的默认值int将为0.任何问题?
答案 2 :(得分:0)
有一点似乎很奇怪。如果你的晚餐类有id属性,它似乎是所有智慧的用途。没有它,创建一个子类是不好的。所以将它添加到其他构造函数中:
public MainRequest(String id, String key, String name){
super.setId(id);
this.key = key;
this.name = name;
}
答案 3 :(得分:0)
改进将是:
实现Base(String id)
之类的构造函数,并从MainRequest
类中调用它,因此Base
的每个子类都必须具有id
值。
public Base(String id) {
this.id = id;
}
考虑在final
类的id
成员变量上使用Base
并删除setId
方法。在大多数情况下,你真的不想设置两次id,是吗?
private final String id;
使MainRequest(String id, String key, String name)
之类的构造函数一次性设置所有内容,如:
public MainRequest(String id, String key, String name) {
super(id);
this.key = key;
this.name = name;
}
abstract
类很好,因为你正在实现getId
方法并且有一个构造函数但根本不想实例化这个基类。如果您只想在构造函数中设置一次这些变量,可以在final
和key
成员上添加name
关键字(假设,因为您已经拥有没有setter方法):
private final String key;
private final String name;
在您的问题中发布工作代码(请参阅te
=> private
)
当然,有些要点取决于你真正想做的事情!但你没有说出你的意图的一些细节!
答案 4 :(得分:0)
为什么你把Class Base作为抽象? 由于您没有任何抽象方法,因此不需要该类是抽象的。