我有3个类需要用Java编写。为了便于讨论,它们被称为Task1、Task2和Task3。
这三个任务完全相同,只是它们是不同的“类型”任务。因此,Task1的字段类型将是"Task1“,依此类推。
最初我写了三个类,只有一个不同之处。但我认为最好是写一个基类Task,然后在三个子类中扩展这个类。我显然是个Java新手。
然而,我想不出该怎么做。
我的基调用如下所示:
package com.scoular.model;
public class TaskBase implements Serializable {
private static final long serialVersionUID = -5867831497684227875L;
private String unid;
private String type;
private Number order;
public TaskBase() {
}
public void create() {
try {
clear();
newNote = true;
Session session = Factory.getSession();
Date date = new Date();
crtDte = session.createDateTime(date);
crtUsr = session.getEffectiveUserName();
} catch (Exception e) {
XspOpenLogUtil.logError(e);
}
}
public void loadByUnid(String unid) {
...
}
public void loadValues(Document doc) {
...
}
private void clear() {
...
}
public boolean save() {
boolean tmpSave = true;
Document doc = null;
Session session = Factory.getSession();
Database PCDataDB = session.getDatabase(PCConfig.getpcDataDBpath());
if (newNote) {
doc = PCDataDB.createDocument();
doc.put("order", this.getNextOrder(doc));
} else {
doc = PCDataDB.getDocumentByUNID(unid);
}
doc.put("title", title);
doc.put("notes", notes);
doc.save();
return tmpSave;
}
// Getters and Setters for common fields
public String getUnid() {
return unid;
}
public void setUnid(String unid) {
this.unid = unid;
}
public String getType(String type) {
return type;
}
public void setType(String type) {
this.type = type;
}
public Number getOrder() {
return order;
}
public void setOrder(Number order) {
this.order = order;
}
}我的超类看起来像这样:
package com.scoular.model;
import com.scoular.model.TaskBase;
public class Task extends TaskBase implements Serializable {
private static final long serialVersionUID = -5867831497684227875L;
// Custom Fields
public Task() {
super();
this.setType("Build");
}
}我删掉了一些无关的代码。本质上,我想我需要一个抽象类,因为我永远不会实例化一个TaskBase。我知道我也可以通过实现来做到这一点,但我不是很好地理解这一点。
任何帮助都将不胜感激。
发布于 2016-05-07 01:15:43
可以从子类访问protected字段。因此,您可以将type字段设置为“`protected”,并在子类中分配所需的值。
TaskBase类:
`public abstract class TaskBase implements Serializable {
private static final long serialVersionUID = -5867831497684227875L;
private String unid;
protected String type;
private Number order;任务类:
public class Task extends TaskBase implements Serializable {
private static final long serialVersionUID = -5867831497684227875L;
// Custom Fields
public Task() {
super();
type = "build";
}
}发布于 2016-05-07 01:15:50
在这种情况下,Java Generics可能会有所帮助。
class Task<T> {
private T t;
T getTask() { return t; }
void setTask(T _t) { this.t = _t; }
}
Task<Task1> task1 = new Task<Task1>();
task1.setTask(sometask);发布于 2016-05-07 01:17:55
Java只允许从超类继承。“实现接口”是一个你应该学习的非常强大的工具。请观看Derek Banas Java教程15和16 (每个教程不到10分钟),并尝试使用实现。如果这些教程不能回答问题,请寻求更多帮助。
https://stackoverflow.com/questions/37077922
复制相似问题