覆盖哪种方法?

2022-09-01 17:27:18

Class A有方法,接口B也有方法。问题很简单,哪种方法在课堂上被覆盖,我们将如何证明这一点?为什么此代码中没有冲突(编译时错误)?run()run()run()Main

class A{
    void run(){System.out.println("A class");}
}

interface B{
    void run();
}

class Main extends A implements B{
    public static void main(String args[]){         
        Main m = new Main();
        m.run();
    }

    // Overridding method
    public void run(){
        System.out.println("run method");
    }
}

答案 1

run的 被覆盖,的 被实现。与接口一样,它只说明您的对象对他人的行为方式,而不强制执行任何行为本身。ArunBB


答案 2

run()接口 B 的方法将通过类 A 重写方法在 Main 中实现。

加一点,

它不会在子类中编写方法,你不会得到众所周知的“未实现的方法”错误。对于非公共方法的类A的方法也是如此,你会得到编译器错误:继承的方法不能隐藏公共抽象方法。run()Mainpublic

这是因为接口的方法默认是公开的,你不能用访问修饰符隐藏它。default (package private)

样本:

class A{
    public void run() {
        System.out.println("This method will be inherited.");
    }
}

interface B{
    void run();
}

class Main extends A implements B{
    public static void main(String args[]){         
        Main m = new Main();
        m.run();
    }
}

OUTPUT : This method will be inherited.

在上面的代码实例中,该方法继承自将实现接口 B 的方法的类 A。run()run()