无法编译从基类实现抽象方法的子类

Man*_*tra 6 java

编译我已经定义的基类的子类有一个问题,它有一个单独的方法,而每个子类都实现了抽象基类方法,但是javac说他们甚至没有在子类中明确定义它们.

DbModel.java(基类)

package com.manodestra.db;

import java.sql.ResultSet;
import java.sql.SQLException;

public abstract class DbModel<T extends DbModel> extends Model {
    abstract T newInstance(ResultSet rs) throws SQLException;
}
Run Code Online (Sandbox Code Playgroud)

DbModel扩展了Model,它只有一个通用的toString方法.

MenuPermissions.java(子类)

package com.manodestra.csa.db.model.configNew;

import com.manodestra.db.DbModel;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Time;
import java.sql.Timestamp;

public class MenuPermissions extends DbModel<MenuPermissions> {
    private final String menuId;
    private final String userLevel;

    public MenuPermissions(
        String menuId,
        String userLevel
    ) {
        this.menuId = menuId;
        this.userLevel = userLevel;
    }

    public String getMenuId() {
        return this.menuId;
    }

    public String getUserLevel() {
        return this.userLevel;
    }

    public MenuPermissions newInstance(ResultSet rs) throws SQLException {
        return new MenuPermissions(
            rs.getString("menu_id"),
            rs.getString("user_level")
        );
    }
}
Run Code Online (Sandbox Code Playgroud)

编译错误

[javac] Compiling 487 source files to C:\Media\Code\manodestra_java\bin
[javac] C:\Media\Code\manodestra_java\src\com\manodestra\csa\db\model\configNew\MenuPermissions.java:10:
error: MenuPermissions is not abstract 
and does not override abstract method newInstance(ResultSet) in DbModel
[javac] public class MenuPermissions extends DbModel<MenuPermissions> {
[javac]        ^
Run Code Online (Sandbox Code Playgroud)

有人看到这里的问题是什么?我猜我忽略了一些非常简单的东西.

有关要求的更多信息:

我正在构建一个实体框架,用于从给定的数据库生成模型对象.上面的MenuPermissions是一个这样的模型对象(由我编写的一个名为GenerateModel的类自动生成).我希望每个模型都有一个方法,允许我根据结果集获取每个目标类型的新实例,该结果集将相应地填充对象并返回它.理想情况下,它应该是一个静态方法,但我已经尝试过它作为一个具体的方法,因为我需要在DbModel的每个子类中强制它的存在.希望有道理.

pet*_*ula 6

您的抽象方法newInstance具有包访问权限,我不知道是否有意,但如果它位于不同的包中,则会出现错误.

编辑:

因此,父类中的抽象方法无法解析,因为它未声明为a public.可能的补救措施是添加public到方法定义或将子类移动到与父类相同的包中:-D

  • @ManoDestra简单地说,使抽象方法"受保护". (2认同)