我有一个Record类。在这个Record类中,我有一个save()方法,它将数据保存到数据库中。我还有其他几个扩展此Record类的类,例如Person类。在我的Person类中,我想为People数据库表定义数据库表名和列。我想制作所有Person引用实例的最终静态属性。我怎么让Record,扩展类知道这个属性将存在于所有扩展类中?如何为基类知道的类定义静态属性?
这是否适合使用界面?
public class Record {
protected String table_name;
protected String[] table_columns;
private void save(){
//save data based on table_name and table_columns;
}
}
public class Person extends Record{
protected final static String table_name = "People";
protected final static String[] table_columns = {"_id","name"}
}
答案 0 :(得分:2)
为什么需要static final
?
如果将Record
抽象化并将表名和表列更改为抽象方法,则需要在子类中实现它们(并且Record
将确保它们的存在)。< / p>
我不确定为什么Person
的实例需要访问此信息,但如果有必要,仍然可以。
public abstract class Record {
protected abstract String getTableName();
protected abstract String[] getTableColumns();
private void save(){
//save data based on getTableName() and getTableColumns();
}
}
public class Person extends Record {
protected String getTableName() {
return "People";
}
protected String[] getTableColumns() {
return new String[] { "_id", "name" };
}
}
答案 1 :(得分:2)
我认为实现你的需求的一个好方法是做这样的事情: (我假设Record应该是抽象的)
public abstract class Record {
protected abstract String getTableName();
protected abstract String[] getTableColumns();
private void save(){
String table_name = getTableName();
String[] table_columns = getTableColumns();
//save data based on table_name and table_columns;
}
}
public class Person extends Record{
protected final static String table_name = "People";
protected final static String[] table_columns = {"_id","name"}
protected String getTableName(){
return table_name;
}
protected String[] getTableColumns(){
return table_columns;
}
}