我只是想知道为什么abstract
课程不能延长interface
。
由于我们无法实例化abstract
类,我是否可以扩展接口,然后覆盖扩展抽象类的类中的那些方法?
例如
abstract class AbstractClass extends InterfaceA
{
}
interface InterfaceA
{
public void methodToBeImplemented();
}
class MyClass extends AbstractClass
{
@Override
public void methodToBeImplemented(){
//do something
}
}
答案 0 :(得分:14)
因为你没有extends
interface - 你implements
。
interface InterfaceA
{
public void methodToBeImplemented();
}
abstract class AbstractClass implements InterfaceA
{
}
class MyClass extends AbstractClass
{
@Override
public void methodToBeImplemented(){
//do something
}
}
抽象类仍然是一个类,就像任何其他类一样。只有接口才能extends
其他接口。
答案 1 :(得分:5)
您实际上可以在Java中扩展接口,但它仍然可以称为接口。
然后,您可以使用抽象类中实现的扩展接口。
interface InterfaceName
{
public void foo();
}
public interface ExtendedInterface extends InterfaceName
{
public void bar();
}
public class ClassName implements ExtendedInteface
{
//implementation for all methods in InterfaceName and ExtendedInteface
...
}
Praveen,它就是设计师设计它的方式。它可以追溯到Java的哲学以及类和接口的使用方式。 假设您有以下课程:学生,教授,员工,技术员。以下界面:人口统计,Paydetails和Personaldetails。
理想情况下,班级教授和技术人员都可以从班级员工中进行扩展,这是有道理的。但是,想象从人口统计学或Personaldetails扩展类技术员。它没有意义。它就像从班级蓝色延伸班级天空一样。只是因为你可以做的并不意味着你应该这样做。但是,让一名技术人员从员工扩展并实现Paydetails或人口统计等界面更有意义。它就像从大自然延伸天空,但实现蓝色界面(赋予它蓝色的功能)。
这是Java开发人员反对多重继承(与cpp不同)而不是使用接口的基本原因。在你的问题中,如果类是抽象的是无关紧要的。你不能简单地从界面扩展,因为它在逻辑上没有意义。
答案 2 :(得分:0)
只扩展接口。当我们在类中使用接口时,它需要在类中实现。另一个是抽象类包含抽象和非抽象方法,而接口只包含抽象方法 这是定义inteface(子类)的实现。