识别接口和Java中不同类的继承之间的关系

时间:2018-12-24 12:13:09

标签: java inheritance interface

我正在尝试在下面的代码中识别所有错误。有4个课程,

  • A:界面
  • AImpl:实现A的类
  • B:C的父类
  • 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() { 
           [. . .] 
       } 
    } 
    

这是我的理解,

    A和AImpl很好,因为A是一个接口类,并且AImpl必须在A中实现抽象方法来履行合同。
  1. C类应该从B类public class B extends C开始扩展
  2. C类中的
  3. execute()是覆盖方法

问题是我应该如何处理public A doIt()public AImpl doIt()?接口类可以是返回值吗?

谢谢!

5 个答案:

答案 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的子级。