我正在尝试在下面的代码中识别所有错误。有4个课程,
C:B的子类别
public interface A {
public void doSomeProcess(String s);
}
public class AImpl implements A {
public void doSomeProcess(String s) {
System.out.println("A Imple Code");
[. . .]
}
}
public class B {
public A doIt() {
[. . .]
}
public String execute() {
[. . .]
}
}
public class C extends B {
public AImpl doIt() {
[. . .]
}
public Object execute() {
[. . .]
}
}
这是我的理解,
public class B extends C
开始扩展execute()
是覆盖方法问题是我应该如何处理public A doIt()
和public AImpl doIt()
?接口类可以是返回值吗?
谢谢!
答案 0 :(得分:0)
Java中没有术语“接口类”。它应该是接口或类。
是的,接口可以是返回类型。在这种用例中可以看到多态的好处。
答案 1 :(得分:0)
是的,我们可以使用interface type
例如:
interface Bounceable
{
Bounceable isBouncing();
}
Class Tyre implements Bounceable
{
@Override
Bounceable isBouncing()
{
Bounceable myVariable;
//your code
return myVariable;
}
}
答案 2 :(得分:0)
问题是我应该如何处理public A doIt()和public AImpl doIt()?接口类可以是返回值吗?
没有问题,是,从1.5版本开始,协变量返回类型就可以覆盖,即,如果子类覆盖父方法,则方法返回类型不必与父方法的返回类型,也可以是其子类型。
在您的情况下,子方法doIt()
可以返回类型A
或它的子AImpl
答案 3 :(得分:0)
接口的一个主要方面是在各处使用它们。仅仅是因为某些方法的调用者不需要了解特定的实现类。
假设您的方法确实返回了 List 。在大多数情况下,这是完全可以的。调用者无需担心该方法是否返回ArrayList或LinkedList或Whatever List!
因此,返回A很好,应该优先使用它!
答案 4 :(得分:0)
是的,您可以将其用作返回类型(它可以保存对直接或间接实现该接口的任何类的对象的引用)
在您的情况下,当您重写类C中的doIt()方法时,它是协变返回类型。 (由于重写了类C中的doIt()方法的返回类型可以向上转换为类B中的doIt()方法的返回类型。它是允许的。)AImpl可以向上转换为A,因为AImpl是A的子级。