Class A
有run()
方法,界面B也有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");
}
}
答案 0 :(得分:25)
run
的{p> A
,run
的{{1}}已实施。由于B
是一个界面,它只会说明您的对象对其他人的行为方式,并且不会强制执行任何行为。
答案 1 :(得分:3)
run()
接口B 的方法将在 class Main 中已实施 A类的重写方法。
添加一个额外点,
你不会在子类run()
中编写Main
方法,你不会知道"未实现的方法"错误。对于非公共方法,类{A}的public
方法都是如此,您将收到编译器错误:继承的方法无法隐藏公共抽象方法。
这是因为methods of interface are public by default并且您无法使用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.
在上面的代码实例中,run()
方法继承自A类,它将实现接口B的run()
方法。
答案 2 :(得分:2)
没有冲突,因为两种方法都具有相同的签名。接口中的方法声明不会被覆盖,因为它们没有实现任何内容。因此,在这种情况下,将重写A类中的run方法。
另一方面,当覆盖方法时,鼓励您使用@Override
注释,例如
@Override
public void run() {
....
}
答案 3 :(得分:2)
将被称为
public void run(){
System.out.println("run method");
}
为什么?
您正在实施run
interface B
,并且覆盖 A
的实施。
如果您删除了上一个run()
实施并删除implements B
,则会调用run()
A
。
答案 4 :(得分:2)
接口B
表示任何实现它的类都必须有一个run方法。 Main扩展了A并继承了A
' run()
方法。
Main满足B
接口对run方法的要求。 Main中的run方法然后覆盖它从run()
类获得的A
方法。
// This is a class with a run method.
class A{
void run(){System.out.println("A class");}
}
// Anything implementing this interface must have a run method.
interface B{
void run();
}
// This class is an extension of A (and therefore has A's run() method)
// This class implements B and must have a run method, which it does, because it has A's
class Main extends A implements B{
public static void main(String args[]){
Main m = new Main();
m.run();
}
// This method then overrides the run Method it inherited from A
// And this method meets the requirement set by implementing B.
public void run(){
System.out.println("run method");
}
}
答案 5 :(得分:1)
答案 6 :(得分:0)
超级类的方法总是被称为overridden
方法,而子类方法被称为overriding
方法。
最终方法cannot be
已覆盖。 [如果超类的方法是最终的]
最终方法can
覆盖。 [以语法的方式阅读它。这个方法在子类中是最终的,但是超类的方法不是最终的]