java - 从父函数/作用域访问子属性

时间:2017-09-28 21:08:27

标签: java oop inheritance

我来自PHP并转移到java。我问自己(和你们)是否有办法实现这样的方式:

我正在尝试实现一个类/类来为许多数据库实体创建CRUD操作。所有实体都继承其功能(大部分来自父级) 我需要在父类 DatabaseEntity 中实现 tableName idFieldName 以避免编译器警告。 似乎java尝试使用parents属性(显然为null),因为该函数是在父级中实现的。

有没有办法克服这个问题?任何反馈都非常令人沮丧!

abstract class DatabaseEntity {

    protected String tableName;
    protected String idFieldName;

    public DataRecord readFromDB(int recordID) throws SQLException {

        ...
        String sqlStatement = String.format("SELECT * FROM %s WHERE %s = %s", this.tableName, this.idFieldName, recordID); // Exception shows this line
        ...
    }
}

class DatabaseRecord extends DatabaseEntity {

    protected String tableName = "DatabaseRecordTable";
    protected String idFieldName = "ID";

    public void getRecord() {

        ...
        DataRecord record = this.readFromDB(1); // leads to java.lang.NullPointerException: null
        ...
    }
}

免责声明:我是github的新手,我赞成任何关于改变我的帖子的反馈意见:)

1 个答案:

答案 0 :(得分:0)

当您使用引用readFromDBtableName的方法idFieldName时,这两个字段保留null,只要它们未被初始化, 尝试从抽象类中删除字段并执行以下操作:

    abstract class DatabaseEntity {

   //  protected String tableName;
   //  protected String idFieldName;

    public abstract String getTableName();



    public abstract String getIdFieldName() ;

    public DataRecord readFromDB(int recordID) throws SQLException {

        ...
        String sqlStatement = String.format("SELECT * FROM %s WHERE %s = %s",getTableName(), getIdFieldName(), recordID);
        ...
    }
}

,实施方式如下:

     class DatabaseRecord extends DatabaseEntity {

    protected String tableName = "DatabaseRecordTable";
    protected String idFieldName = "ID";

    public void getRecord() throws SQLException {


        DataRecord record = this.readFromDB(1);  

    }

    @Override
    public String getTableName() {
        return this.tableName;
    }

    @Override
    public String getIdFieldName() {
        return this.idFieldName ;
    }
}