2013-04-17 46 views
0

我有一個Record類。在這個Record類中,我有一個將數據保存到數據庫的save()方法。我有其他幾個擴展這個Record類的類,例如Person類。在我的Person類中,我想爲People數據庫表定義數據庫表名和列。我想使這些最終的靜態屬性爲Person引用的所有實例。我如何讓Record(擴展類)知道此屬性將存在於所有擴展類中?我如何爲基類知道存在的類定義靜態屬性?java - 最後被保護的靜態類,用於擴展另一個類的類

這是否適合使用接口?

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

你爲什麼要在基類具有這種屬性,即目標是什麼? –

+0

我希望基類能夠將記錄保存到正確的數據庫表,並知道它需要填充什麼列 – David

回答

2

爲什麼需要static final

如果您使Record抽象並將表名和表列更改爲抽象方法,則需要在子類中實現它們(並且Record將確保其存在)。

我不確定爲什麼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" }; 
    } 
} 
+0

像這樣 - http://stackoverflow.com/questions/3911278/inherit-a-static-變量在java/3911294 –

+0

ooooohhhhhh。直到現在,從來沒有理解過使用抽象類和接口。謝謝! – David

2

我認爲實現你的請求數的好辦法是做這樣的事情: (我假設記錄應該是抽象的)

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; 
    } 
} 
相關問題