Java: returns接口的接口和函数的实现
Java: Implementation of interfaces and functions that returns interfaces
我在实现接口时遇到问题,该接口具有一个函数,该函数 returns 一个 class 的值,它本身实现了一个接口。
我有一个任务说我需要以这种方式实现那些特定的接口。
这些是我的接口:
public interface Something {
int getValue(); // unique
}
public interface SomethingCollection {
void add(Something something);
Something removeMaxValue();
}
这是实现 Something 接口的class:
public class Node implements Something {
private int value;
private Node next;
public Node(int value) {
this.value = value;
this.next = null;
}
public Node(int value, Node next) {
this.value = value;
this.next = next;
}
public int getValue() {
return this.value;
}
public Node getNext() {
return this.next;
}
public void setNext(Node next) {
this.next = next;
}
}
这是实现 SomethingCollection 的 class:
public class List implements SomethingCollection {
private Node head;
private int maxValue;
public List() {
this.head = null;
}
public List(Node p) {
Node n = new Node(p.getValue(), p.getNext());
this.head = n;
this.maxValue = this.head.getValue();
}
public void add(Node node) {
if (node.getValue() > this.maxValue) {
this.maxValue = node.getValue();
}
node.setNext(this.head);
this.head = node;
}
public Node removeMaxValue() {
Node current = this.head;
Node prev = this.head;
if (this.head == null) {
return this.head;
}
while (current != null) {
if (current.getValue() == this.maxValue) {
prev.getNext() = current.getNext();
return current;
}
prev = current;
current = current.getNext();
}
}
}
我在列表 class 中遇到此错误:"List is not abstract and does not override abstract method add(Something) in SomethingCollection"。
我不知道如何解决这个问题以及我做错了什么。我该如何解决这个问题?
您的列表未实现 void add(Something something)
。
当然,它确实实现了 public void add(Node node)
,并且节点是 Something。但是你的 class 实现了一个接口。它必须满足该接口。该接口包括一个接受任何类型的 Something 的方法,而不仅仅是节点。
还有一些事情需要考虑:你想让一个节点成为某物,还是包含某物?
您可以在您的集合中使用泛型,像这样应该可以工作:
interface SomethingCollection <T>
{
public void add(T something);
public T removeMaxValue();
}
class List implements SomethingCollection<Node> {
...
}
我在实现接口时遇到问题,该接口具有一个函数,该函数 returns 一个 class 的值,它本身实现了一个接口。 我有一个任务说我需要以这种方式实现那些特定的接口。 这些是我的接口:
public interface Something {
int getValue(); // unique
}
public interface SomethingCollection {
void add(Something something);
Something removeMaxValue();
}
这是实现 Something 接口的class:
public class Node implements Something {
private int value;
private Node next;
public Node(int value) {
this.value = value;
this.next = null;
}
public Node(int value, Node next) {
this.value = value;
this.next = next;
}
public int getValue() {
return this.value;
}
public Node getNext() {
return this.next;
}
public void setNext(Node next) {
this.next = next;
}
}
这是实现 SomethingCollection 的 class:
public class List implements SomethingCollection {
private Node head;
private int maxValue;
public List() {
this.head = null;
}
public List(Node p) {
Node n = new Node(p.getValue(), p.getNext());
this.head = n;
this.maxValue = this.head.getValue();
}
public void add(Node node) {
if (node.getValue() > this.maxValue) {
this.maxValue = node.getValue();
}
node.setNext(this.head);
this.head = node;
}
public Node removeMaxValue() {
Node current = this.head;
Node prev = this.head;
if (this.head == null) {
return this.head;
}
while (current != null) {
if (current.getValue() == this.maxValue) {
prev.getNext() = current.getNext();
return current;
}
prev = current;
current = current.getNext();
}
}
}
我在列表 class 中遇到此错误:"List is not abstract and does not override abstract method add(Something) in SomethingCollection"。 我不知道如何解决这个问题以及我做错了什么。我该如何解决这个问题?
您的列表未实现 void add(Something something)
。
当然,它确实实现了 public void add(Node node)
,并且节点是 Something。但是你的 class 实现了一个接口。它必须满足该接口。该接口包括一个接受任何类型的 Something 的方法,而不仅仅是节点。
还有一些事情需要考虑:你想让一个节点成为某物,还是包含某物?
您可以在您的集合中使用泛型,像这样应该可以工作:
interface SomethingCollection <T>
{
public void add(T something);
public T removeMaxValue();
}
class List implements SomethingCollection<Node> {
...
}