"Class is not abstract and does not override method in class" 错误,但我实现了那些方法

"Class is not abstract and does not override method in class" error, but I implemented those methods

我知道 Java 中有很多与此编译器错误相关的问题。 我必须编写播放图像、音频文件和视频的简单媒体播放器的行为。我写了七个 classes,其中三个是接口。这是示意图:

其他class是:

现在,我遇到的问题是,尽管我认为我正确地实现了所有内容,但我在标题中遇到了编译器错误。另外,我每次编译,编译器只输出4个错误,与音频、图像、视频和媒体有关classes。如果我在随机接口中删除一个签名,编译器会切换到另一种方法并告诉我它的实现有误。即使我删除了除一个方法签名之外的所有方法签名,编译器也会输出关于该特定方法的错误。

此外,我不知道这是否有帮助,我使用 Java 8 而我不使用 IDE,我编译并 运行 来自Windows终端。

代码如下:

音频接口

public interface AudioI{
  public void louder();
  public void weaker();
  public int getVolume();
  public void setVolume();
}

视频接口

public interface VideoI{
  public void brighter();
  public void darker();
  public int getBrightness();
  public void setBrightness();
}

媒体接口

public interface MediaI{
  public void play();
  public int getDuration();
  public void setDuration();
  public String getTitle();
  public void setTitle();
}

音频class

public class Audio extends Media implements AudioI, MediaI{
  private int volume;
  private int duration;
  private String title;

  /**
    CONSTRUCTORS
  **/
  Audio(){
    this.title = "audio.mp3";
    this.duration = 100;
    this.volume = 5;
  };

  Audio(String title, int duration){
    this.title = title;
    this.duration = duration;
    this.volume = 5;
  };

  /**
    AUDIOI METHODS IMPLEMENTATION
  **/
  public void louder(){
    if(this.volume < 10){
        this.volume++;
    }else{
        System.out.print("Maximum volume reached");
    }
  };

  public void weaker(){
    if(this.volume > 0){
        this.volume--;
    }else{
        System.out.print("Minimum volume reached");
    }
  };

  public int getVolume(){
    return this.volume;
  };

  public void setVolume(int volume){
    if(volume > 9){
        System.out.println("******************************");
        System.out.println("* ERROR: maximum volume is 9 *");
        System.out.println("******************************");
    }else if(volume < 0){
        System.out.println("******************************");
        System.out.println("* ERROR: minimum volume is 0 *");
        System.out.println("******************************");
    }else{
        this.volume = volume;
    }
  };

  /**
    MEDIAI METHODS IMPLEMENTATION
  **/
  public void play(){
    int i;

    System.out.println("TITLE: " + this.title);

    System.out.print("VOLUME: >");
    for(i = 0; i < this.volume; i++){
        System.out.print(")");
    }
    System.out.println("");
  };

  public int getDuration(){
    return this.duration;
  };

  public void setDuration(int duration){
    this.duration = duration;
  };

  public String getTitle(){
    return this.title;
  };

  public void setTitle(String title){
    this.title = title;
  };
}

图片class

public class Image extends Media implements VideoI, MediaI{
  private String title;
  private int brightness;
  private int duration = 1;

  /**
    CONSTRUCTORS
  **/
  Image(){
    this.title = "img.jpeg";
    this.brightness = 5;
  };

  Image(String title){
    this.title = title;
    this.brightness = 5;
    this.duration = 1;
  };

  /**
    AUDIOI METHODS IMPLEMENTATION
  **/
  public void brighter(){
    if(this.brightness < 10){
        this.brightness++;
    }else{
        System.out.print("Maximum brightness reached.");
    }
  };

  public void darker(){
    if(this.brightness > 0){
        this.brightness--;
    }else{
        System.out.print("Minimum brightness reached.");
    }
  };

  public int getBrightness(){
    return this.brightness;
  };

  public void setBrightness(int brightness){
    if(brightness > 10){
        System.out.println("* ERROR: maximum brightness is 10 *");
    }else if(brightness < 1){
        System.out.println("* ERROR: minimum brightness is 1 *");
    }else{
        this.brightness = brightness;
    }
  };

  /**
    MEDIAI METHODS IMPLEMENTATION
  **/
  public void play(){
    int i;

    System.out.println("TITOLO: " + this.title);

    System.out.print("LUMINOSITA': >");
    for(i = 0; i < this.brightness; i++){
        System.out.print("*");
    }
    System.out.println("");
  };

  public int getDuration(){
    return this.duration;
  };

  public void setDuration(int duration){
    System.out.println("ERROR: cannot set image duration");
  };

  public String getTitle(){
    return this.title;
  };

  public void setTitle(String title){
    this.title = title;
  };
}

视频class

import java.util.ArrayList;

public class Video extends Media implements VideoI, MediaI{
  private int duration;
  private String title;
  private int brightness;
  private Image buff;
  ArrayList<Image> images = new ArrayList<Image>();

  /**
    CONSTRUCTORS
  **/
  Video(){
    for(int i = 0; i < 100; i++){
        images.add(new Image("img" + i + ".jpeg"));
    }
    this.brightness = 5;
    this.duration = 100;
    this.title = "slideshow.mkv";
  };

  Video(String title, int nOfImages){
    for(int i = 0; i < nOfImages; i++){
        buff = new Image("img" + i + ".jpeg");
        this.images.add(buff);
    }
    this.brightness = this.images.get(0).getBrightness();
    this.duration = nOfImages;
    this.title = title;
  };

  /**
    VIDEOI METHODS IMPLEMENTATION
  **/
  public void brighter(){
    int i;

    if(this.brightness < 10){
        this.brightness++;

        for(i = 0; i < this.images.size(); i++){
            this.images.get(i).setBrightness(this.brightness);
        }
    }else{
        System.out.print("Maximum brightness reached.");
    }
  };

  public void darker(){
    int i;

    if(this.brightness > 0){
        this.brightness--;

        for(i = 0; i < this.images.size(); i++){
            this.images.get(i).setBrightness(this.brightness);
        }
    }else{
        System.out.print("Minimum brightness reached.");
    }
  };

  public int getBrightness(){
    return this.brightness;
  };

  public void setBrightness(int brightness){
    if(brightness < 0){
        System.out.println("**********************************");
        System.out.println("* ERROR: minimum brightness is 0 *");
        System.out.println("**********************************");
    }else if(brightness > 10){
        System.out.println("***********************************");
        System.out.println("* ERROR: maximum brightness is 10 *");
        System.out.println("***********************************");
    }else{
        for(int i = 0; i < this.images.size(); i++){
            this.images.get(i).setBrightness(brightness);
            this.brightness = brightness;
        }
    }
  };

  /**
    MEDIAI METHODS IMPLEMENTATION
  **/
  public void play(){
    int i;

    System.out.println("TITOLO: " + this.title);

    System.out.print("LUMINOSITA': >");
    for(i = 0; i < this.brightness; i++){
        System.out.print("*");
    }
    System.out.println("");


    System.out.print("DURATA VIDEO: ");
    for(i = 0; i < this.images.size(); i = i + 10){
        System.out.print("[] ");
    }
    System.out.println("");
  };

  public int getDuration(){
    this.duration = this.images.size();
    return this.duration;
  };

  public void setDuration(int duration){
    System.out.println("ERROR: cannot set video duration");
  };

  public String getTitle(){
    return this.title;
  };

  public void setTitle(String title){
    this.title = title;
  };
}

媒体class

import java.util.ArrayList;

public class Media implements AudioI, VideoI, MediaI{
  private Video video;
  private Audio audio;
  private String title;
  private int duration;
  private int volume;
  private int brightness;
  private boolean hasVideo;
  private boolean hasAudio;

  /**
    CONSTRUCTORS
  **/

  Media(){
    this.title = "Video.mkv";
    this.volume = 5;
    this.brightness = 5;
    this.hasVideo = false;
    this.hasAudio = false;
  };

  Media(String title, Audio audio, Video video){
    this.video = video;
    this.audio = audio;
    this.title = title + ".mkv";
    this.volume = audio.getVolume();
    this.brightness = video.getBrightness();
    if(this.audio.getDuration() >= this.video.getDuration()){
        this.duration = this.audio.getDuration();
    }else{
        this.duration = this.video.getDuration();
    }
    this.hasVideo = true;
    this.hasAudio = true;
  };

  Media(String title, Audio audio){
    this.audio = audio;
    this.title = title + ".mp3";
    this.volume = audio.getVolume();
    this.duration = this.audio.getDuration();
    this.hasVideo = false;
    this.hasAudio = true;
  };

  Media(String title, Video video){
    this.video = video;
    this.title = title + ".sdw";
    this.brightness = video.getBrightness();
    this.duration = this.video.getDuration();
    this.hasVideo = true;
    this.hasAudio = false;
  };

  /**
    MEDIAI METHODS IMPLEMENTATION
  **/

  public void play(){
    int i;

    System.out.println("TITOLO: " + this.title);

    if(this.hasAudio == true){
        System.out.print("VOLUME: >");
        for(i = 0; i < this.audio.getVolume(); i++){
            System.out.print(")");
        }
        System.out.println("");
    }

    if(this.hasVideo == true){
        System.out.print("LUMINOSITA': >");
        for(i = 0; i < this.video.getBrightness(); i++){
            System.out.print("*");
        }
        System.out.println("");
    }

    if(this.hasVideo == true && this.hasAudio == true){
        System.out.print("DURATA AUDIO: ");
        for(i = 0; i < this.video.getDuration(); i = i + 10){
            System.out.print("[] ");
        }
        System.out.println("");
        System.out.print("DURATA VIDEO: ");
        for(i = 0; i < this.audio.getDuration(); i = i + 10){
            System.out.print("[] ");
        }
        System.out.println("");
    }
  };

  public void setAudio(Audio audio){
    this.audio = audio;
  };


  public void setVideo(Video video){
    this.video = video;
  };

  public int getDuration(){
    return this.duration;
  };

  public void setDuration(int duration){
    System.out.println("ERROR: cannot modify media duration");
  };


  public String getTitle(){
    return this.title;
  };

  public void setTitle(String title){
    this.title = title;
  };

  /**
    AUDIOI METHODS IMPLEMENTATION
  **/

  public void louder(){
    this.audio.louder();
  };

  public void weaker(){
    this.audio.weaker();
  };

  public int getVolume(){
    return this.audio.getVolume();
  };

  public void setVolume(int volume){
    this.audio.setVolume(volume);
  };

  /**
    VIDEOI METHODS IMPLEMENTATION
  **/

  public void brighter(){
    this.video.brighter();
  };

  public void darker(){
    this.video.darker();
  };

  public int getBrightness(){
    return this.video.getBrightness();
  };

  public void setBrightness(int brightness){
    this.video.setBrightness(brightness);
  };
}

由于媒体 class 已经实现了音频、视频和 MediaL 接口,classes 音频和视频没有实现这些接口,并且看到了这种情况发生

问题似乎与您的 set 方法有关,在 接口 中,您已声明 set 方法将 not 有一个参数,但是在实现那些 接口 中,您反而为它们提供了参数,即您不是接口实现适当的方法,而是定义一个与接口[=]中的方法完全不同的新方法

解决方案是简单地更改 接口 set 方法定义以匹配 反之亦然。