【问题标题】:Class is not abstract and does not override abstract method in superclass类不是抽象的,并且不会覆盖超类中的抽象方法
【发布时间】:2018-06-11 11:36:09
【问题描述】:

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

我在这里错过了什么?

提前致谢。

【问题讨论】:

  • 您的实现类无法覆盖Individual 中的包私有抽象方法,因为它位于不同的包中。

标签: java overriding abstract-class abstract superclass


【解决方案1】:

看起来您的抽象 mutate 方法对子类不可见,因为它具有默认访问权限(这是包私有的),而 KnapsackIndividual 子类位于不同的包中。

abstract 方法更改为:

protected abstract void mutate(double mutationRate);

并相应地更改覆盖方法:

@Override
protected void mutate(double mutationRate){

}

【讨论】:

    【解决方案2】:

    一个具体(非抽象)类必须实现从父类继承的所有非实现(抽象)方法。您正在实现相同的方法,但由于它们是类私有的,因此它们是不可见的,因此就好像它们没有实现一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 2021-10-02
      • 2014-01-30
      • 1970-01-01
      相关资源
      最近更新 更多