4

这是代码:

interface hi
{
    public void meth1();
}
abstract class Hullo
{
    public abstract void meth1();
}
public class Hello extends Hullo implements hi
{
    public void meth1(){}
}

问题:代码编译和一切。我想知道 Hello 类中的 meth1() 覆盖了哪个 meth1()?接口中的ont或抽象类中的ont,为什么?

4

3 回答 3

10

答案很简短:两者都......

事实上,正确地说:你没有覆盖它们,你正在用一种方法实现它们。

于 2012-07-11T13:50:31.140 回答
0

通常我们覆盖一个已经有一些定义的现有方法。我的意思是,与超类相比,我们在子类中添加了一些额外的功能。由于这两种方法都是抽象的,所以我们可以说我们实现了未实现的方法。

您可以参考在 Java 中创建线程,与扩展 Thread 类相比,我们更喜欢实现 Runnable 接口。

于 2014-04-01T10:33:00.877 回答
0

绝对正确的问题。

这里接口和抽象类都有相同的方法。

您有一个类名为 hello 并扩展了抽象类并实现了接口,它是 true 并且您在 hello 类上覆盖了 meth1 方法,它很好,并且可以正确编译并且没有给出任何错误,但是您无法确定哪个类方法像抽象类一样被覆盖或界面。

这是运行时多态性,您不能创建抽象类和接口的对象,但可以创建其引用变量。这里的解决方案是您无法在编译时识别它在运行时的实际覆盖。

    interface hi
{
    public void meth1();
}
abstract class Hullo
{
    public abstract void meth1();
}
public class Hello extends Hullo implements hi
{
    public void meth1(){
        System.out.println("hello");
    }
        hi h= new Hello();
        h.meth1();//its means interface method is override. and its decide when we call method.
        hullo hu= new Hello();
        hu.meth1();//its means abstract class method is override.
}
于 2015-06-11T10:58:41.957 回答