java - 类不是抽象的,不会覆盖父类(super class)中的抽象方法

标签 java overriding abstract-class abstract superclass

我正在研究遗传算法的通用实现。 我正在尝试从抽象类 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);

}

这是扩展类

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 方法对子类不可见,因为它具有默认访问权限(这是包私有(private)的),并且 KnapsackIndividual 子类类位于不同的包中。

abstract方法更改为:

protected abstract void mutate(double mutationRate);

并相应地更改重写方法:

@Override
protected void mutate(double mutationRate){

}

关于java - 类不是抽象的,不会覆盖父类(super class)中的抽象方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50796804/

相关文章:

java - 关于压倒性原则

java - 为什么抽象类可以强制重写具体方法?

javascript - 覆盖现有实例的方法

java - 强制重写非抽象方法

java swing - 如何改变窗口背景

java - 从 .txt 文件加载数据时出现 FileNotFoundException: "Access is denied"

Java - 像普通代码一样运行字符串

c# - CSharp虚方法和参数

java - 特定类的抽象类实例不起作用

java - 在需要 List<Parent class> 的方法参数中使用 List<Child class>