java - Java中如何覆盖子类中Super对象的某个字段?

标签 java oop inheritance

我有这两门课:

class Parent
{ 
   protected static String table;

   public static long getRow()
   {
      String query = "SELECT * FROM " + table + " WHERE id =? " ;
      //other code...
   }
}

然后我扩展这个类:

class Child extends Parent
{
    protected static String table = "tableName";
   //other code..
}

但是,当我尝试这样做时:

long id = Child.getRow();

我收到错误,因为查询将“null”放入其中 table 值应有的位置。即SELECT * FROM null

我认为在子类中设置table的值会导致它在它继承的方法中也被更新,但显然不是。我需要做什么来解决这个问题?

最佳答案

您不能以这种方式覆盖变量。在您的示例中,每个类都有自己的 table 变量版本,而在定义了 getRow 方法的父级中,该变量未定义。您可以使用以下更好的设计:

abstract class Parent {

   public abstract String getTable();

   public static long getRow() {
      String query = String.format("SELECT * FROM %s WHERE id = ?", getTable()) ;
      //other code...
   }
}

class Child extends Parent {
    public String getTable() {
        return "tableName";
    }
}

关于java - Java中如何覆盖子类中Super对象的某个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803690/

相关文章:

java - JaxB Unmarshal 异常 : javax. xml.bind.UnmarshalException : unexpected element. 我哪里出错了?

java - 解释有关自动包装(基元和包装器)的 groovy 文档

java - Camel "Succesfull delivery acknowledgements"

java - 库存管理JAVA(检查项目是否已存在)

C# 静态成员 "inheritance"- 为什么它存在?

java - 为什么 PrintWriter 不能与 Thread.sleep() 一起使用

python - 如何通过子类化拦截操作?

c++ - 在两个派生类之间执行专用代码

c# - 使用工厂的动态继承

c++ - 类数组求和、索引和计算