【问题标题】:Interface and Abstract class ad method overriding接口和抽象类广告方法覆盖
【发布时间】:2012-07-11 03:48:27
【问题描述】:

代码如下:

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,为什么?

【问题讨论】:

标签: java class interface abstract-class overriding


【解决方案1】:

绝对正确的问题。

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

您有一个类名为 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.
}

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • @MartiinCourteaux 如何实现both
      • 重写意味着你为一个方法指定了一个新的代码块,这意味着有一段旧的代码。实现是给一个还没有任何主体的方法提供一段代码。这些方法是abstract 方法,或接口内的方法。
      猜你喜欢
      • 2015-08-20
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多