我试图用Java来解决OOP,我遇到了一个我无法理解/解决的常见问题。我已经研究了这个主题,我找到了相关材料,但我仍然无法理解。 (请原谅我的无知)。
1-我有一个只包含一个方法的接口,实现此方法时应该返回一个字符串列表。 (一切都很好)
2-抽象类实现了接口,它包含一些额外的方法,例如:
public void setSomething(List<MyInterface> something) { this.something = something; }
public List<MyInterface> getSomething() { return something; }
现在,一个新的子类扩展了抽象类,我尝试做的其中一件事就是调用方法setSomething并创建一个MyInterface类型的列表。
有人可以指出我如何实现这个目标的正确方向吗?
谢谢
答案 0 :(得分:0)
以最简单的方式
public List<Whatever> generateList() {
List<Whatever> results = new ArrayList<>();
results.add(new Whatever());
return results;
}
好的,认真的:上面返回一个空列表。但这应该足以进行一些初步测试。
然后你可以继续前进
class DerivedClass ... {
private final List<YourInterface> someObjects;
void setSomething(List<YourInterface> otherObjects) {
this.someObjects = otherObjects;
}
List<YourInterface> getSomething() {
return this.someObjects;
}
...添加实际的对象,当然,只有你知道如何创建。
或许,根据您的意见选择真正简单的解决方案:
@type {void}
编辑:您的问题似乎是您不知道如何创建界面的对象。事情是:这是不可能的。您只能为类实例化(调用new)。换句话说:你需要一些实现 MyInterface的类;你是那个阶级的“新”对象;并将这些对象添加到列表中。
答案 1 :(得分:0)
创建“MyInterface类型列表”就像调用构造函数一样简单:
List<MyInterface> list = new ArrayList<>();
您可以在List
界面的多个实现之间进行选择:LinkedList
,ArrayList
等。
您可以在Java教程中了解List接口的实现:https://docs.oracle.com/javase/tutorial/collections/implementations/list.html
现在,如果要实际创建类型为MyInterface
的对象并将其添加到列表中,则需要创建实现MyInterface
的类的对象。那就足够了。例如:
class A implements MyInterface {...}
list.add(new A());
您可以在此帖子中了解有关使用类型接口实例化对象的更多信息:Creating interface objects in java
调用setSomething
方法与在您创建的对象上调用它一样简单:
MySubClass myObj = new MySubClass();
myObj.setSomething(list);
但是,我认为你的困惑不是来自对面向对象编程缺乏了解,而是更具体地说是Java中的泛型。
您可以在这里阅读Java教程中的泛型:https://docs.oracle.com/javase/tutorial/java/generics/index.html