Class 不是抽象的,也不会覆盖超类中的抽象方法
Class is not abstract and does not override abstract method in superclass
我正在研究遗传算法的通用实现。
我正在尝试从抽象 class Individual
扩展背包问题的特定 Individual
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);
}
这是扩展的class
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
我在这里错过了什么?
提前致谢。
一个具体的(非抽象的)class 必须实现从父 class 继承的所有未实现的(抽象的)方法。您正在实现相同的方法,但由于它们对 class 是私有的,所以它们是不可见的,因此就好像它们没有实现一样。
看起来您的抽象 mutate
方法对子 class 不可见,因为它具有默认访问权限(包私有),而 KnapsackIndividual
子- class 在不同的包中。
将abstract
方法更改为:
protected abstract void mutate(double mutationRate);
并相应地更改覆盖方法:
@Override
protected void mutate(double mutationRate){
}
我正在研究遗传算法的通用实现。 我正在尝试从抽象 class Individual
扩展背包问题的特定 Individualpackage 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);
}
这是扩展的class
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
我在这里错过了什么?
提前致谢。
一个具体的(非抽象的)class 必须实现从父 class 继承的所有未实现的(抽象的)方法。您正在实现相同的方法,但由于它们对 class 是私有的,所以它们是不可见的,因此就好像它们没有实现一样。
看起来您的抽象 mutate
方法对子 class 不可见,因为它具有默认访问权限(包私有),而 KnapsackIndividual
子- class 在不同的包中。
将abstract
方法更改为:
protected abstract void mutate(double mutationRate);
并相应地更改覆盖方法:
@Override
protected void mutate(double mutationRate){
}