java - 类不是抽象的,并且不会覆盖超类中的抽象方法
问题描述
我正在研究遗传算法的通用实现。我正在尝试从抽象类个人扩展特定个人以解决背包问题
package GenericGA;
public abstract class Individual {
private double fitness;
private double probability;
public double getFitness() {
return fitness;
}
public double getProbability() {
return probability;
}
public void updateProb(double totalFitness){
probability = fitness/totalFitness;
}
abstract void updateFitness();
abstract Individual crossover(Individual partner);
abstract void mutate(double mutationRate);
}
这是扩展类
package GenericGA.SpecificImplementations;
import GenericGA.Individual;
public class KnapsackIndividual extends Individual {
void updateFitness(){
}
Individual crossover(Individual partner){
return null;
}
void mutate(double mutationRate){
}
public static void main(String[] args){
System.out.println("Hello");
}
}
由于我使用的是 intellij 并且它给了我错误,我认为这可能是 IDE 的问题,所以我用 javac 编译,我得到了同样的错误:
GenericGA.SpecificImplementations.KnapsackIndividual is not abstract and does not override abstract method mutate(double) in GenericGA.Individual
没有拼写错误并且签名是正确的,当删除给出错误的 mutate 方法时,我也得到了其他抽象方法的错误。
此外,如果我在方法之上使用@Override,它会说
Method does not override method from its superclass
我在这里想念什么?
提前致谢。
解决方案
看起来您的抽象mutate
方法对子类不可见,因为它具有默认访问权限(这是包私有的),并且KnapsackIndividual
子类位于不同的包中。
将方法更改abstract
为:
protected abstract void mutate(double mutationRate);
并相应地更改覆盖方法:
@Override
protected void mutate(double mutationRate){
}
推荐阅读
- reactjs - ./components/Layout/Navbar.js 尝试导入错误:“链接”未从“下一个/链接”导出(导入为“链接”)
- python - 人脸识别:ValueError:allow_pickle=False 时无法加载对象数组
- react-native - 热重载仅适用于 App.js 中的更改
- go - 避免空结构使用相同的地址
- wordpress - 一种在 WordPress 中创建可重用代码标签的方法
- c++ - gcc >=10.1 和 clang 不检测未使用但设置 lambda
- c# - c# ClientWebSocket 创建多个 websocket 连接
- amazon-web-services - 可以通过将云端域添加到不属于我的域来实现中间人攻击吗?
- javascript - 捕获内容安全策略指令违规
- encryption - 在Android中解密从.net生成的RSA加密值