私はJavaで書く必要がある3つのクラスがあります。これらは、引数としてTask1、Task2、Task3と呼ばれます。1つの違いで3つのクラスを構成する方法
3つのタスクは、タスクの「タイプ」が異なることを除いて全く同じです。したがって、Task1のフィールドタイプは "Task1"となります。
私はこの1つの違いで3つのクラスを書いていました。しかし、基本クラスのTaskを作成し、このクラスを3つのサブクラスに拡張するほうがよいと思います。
しかし、私はこれを行う方法を理解することはできません。
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をインスタンス化しないので抽象クラスを必要とすると思います。私は実装でこれを行うこともできると理解していますが、それをよく理解していません。
ご協力いただければ幸いです。
。抽象クラスの4つのクラスはすべて同じことをしますが、もちろん作成はもちろん型フィールドに異なる値を持ちます。だから私は、少なくとも3つの他のクラスは、抽象クラスにすることができます、それぞれのサブクラスのクラスを作成すると思うだろうが、それは多少の過剰な1つのプロパティですか? –
私は私が続くことを確信していません。あなたの抽象クラスには他のクラスはありません。サブクラスは抽象クラスを拡張し、抽象クラスによって定義された抽象メソッドのいずれかの具体的なメソッドを定義します。 createメソッドを除いて他のものがすべて同じであれば、create(抽象クラス)以外のすべての抽象クラスの具体的なメソッド(protectedとして設定)を定義することができます。抽象クラス(具体的なバージョンのcreateを実装するTask1、Task2など)の具体的な拡張を定義することができます。 – Andonaeus
申し訳ありませんが、ミスタイプ - 私は4つの方法を意味しました。 create()メソッドは、typeの値がサブクラス "Type1"などの "Type1"となることを除いて全く同じです。抽象クラスにcreateメソッドを持たせてリストアップするのは簡単なはずですが、create()を呼び出すときに何らかの形で型の値を入れておくように思えます。それほど大したことではありませんが、私は抽象クラスで変更されていない3つのクラスを残しておきます。 –