以下是代码:
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以及为什么?
答案 0 :(得分:10)
答案很简短:两个......
事实上,为了正确:你覆盖它们都没有,你用一种方法实现它们。
答案 1 :(得分:0)
通常我们覆盖已经有一些定义的现有方法。我的意思是,与超类相比,我们在子类中添加了一些额外的功能。由于两种方法都是抽象的,所以我们可以说我们实现了未实现的方法。
与扩展Thread类相比,您可以参考在Java中创建我们更喜欢实现Runnable接口的线程。
答案 2 :(得分: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.
}