调用接口方法,但返回类型无效吗?

时间:2018-09-22 01:07:28

标签: java

我不愿意来这里问一个可能是一个愚蠢的问题,但是我是一名编码学生,我的老师很少提供有关接口主题的信息,但是我有一个作业要交,我正在在类正在实现的接口内调用方法的问题。这是我正在做的项目的代码

import java.util.Scanner;
public class Lab2B {
   public static void main(String[] args) {
      Octagon test = new Octagon();
      System.out.printf("The octagon has a side length of %1.2f, a perimiter of %1.2f, and an area of %1.2f.", test.sideLength, test.perimiter, test.area);
   }
}

abstract class GeometricObject {
   double area;
   double perimiter;
   public GeometricObject() {

   }
}

class Octagon extends GeometricObject implements Comparable, Cloneable {
   double sideLength;
   public Octagon() {
      Scanner input = new Scanner(System.in);
      System.out.println("Enter side length of Octagon: ");
      this.sideLength = input.nextDouble();
      this.area = ((2 + (4 / Math.sqrt(2))) * this.sideLength * this.sideLength);
      this.perimiter = (this.sideLength * 8);
   }

   public void clone() {
   System.out.println("I wish I knew how to code");
   }
}


interface Cloneable {
   public void clone();
}

它给了我这个错误

Lab2B.java:29: error: clone() in Octagon cannot override clone() in Object
public void clone() {
            ^
return type void is not compatible with Object

老实说,我不确定我在这里做错了什么,这似乎与我可以在互联网上找到的接口的每个示例都一致。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

首先,您可以从java实现Cloneable接口(无需创建自己的接口)。

另外,它有点怪异,但是克隆方法在Object类中,需要重写。 (它应该在Cloneable中)。要覆盖克隆方法,您可以执行以下操作:

@Override
protected Object clone() throws CloneNotSupportedException {

}

以下是使用克隆的“深层复制和浅层复制”的很好阅读:

https://howtodoinjava.com/java/cloning/a-guide-to-object-cloning-in-java/

答案 1 :(得分:0)

首先,您不应该声明Cloneable接口。在标准Java API中已经存在。

但是,除非您的分配明确要求实施Cloneable,否则应将其从代码中删除。现代Java标准认为Cloneable接口的设计已被破坏。它的存在仅是因为Java首次发明时就编写了遗留代码。