怎么区分方法是继承来的还是实现的接口中的方法

handonghandong 2009-08-24
这不是调用了哪个方法,而是对哪个方法的实现,对于抽象类和接口,都是没有实体的,都需要继承他的子类或实现了接口的类去实现方法
hunter4java 2009-11-04
这个题目不无聊的,可以得出:是实现的接口中的方法而不是抽象类。

看一个例子:

interface api
{
    void func(); // 接口中的方法默认是public abstract 方法
}

abstract class absClass
{
    abstract void func(); // 访问类型是default类型
}

class realClass1 extends absClass
{
    void func() // OK.继承抽象类的访问类型(当然还可以是public,protected)
    {

    }
}

class realClass2 extends absClass implements api
{
    void func() // 编译错误,必须是public访问类型,说明是实现的接口中的方法
    {

    }
}
jinleix 2009-11-30
应该是接口的,我记得继承优先级大于接口。
无双Rama 2010-06-03
hunter4java 说得很清楚
yunj 2010-06-09
既是A的test,又是B的test。

C c = new C();
A a = (A)c;
B b = (B)c;
a.test();
b.test();

调用的都是C里的test啊

class Q implements W,E,R,T,Y 等等等,这些接口里也可以是同名的方法
Heart.X.Raid 2010-06-21
接口中的方法和抽象类中的抽象方法都没有具体的字节码指令。JVM是不可能动态绑定到接口和抽象类中的抽象方法的。

如果想要了解JVM关于动态绑定机制的实现,可以看看我的博客:http://hxraid.iteye.com/blog/428891。
blogzhoubo 2010-10-19
抽象方法test()和接口中的test()都仅仅是方法的定义,里面并没有方法的实现。目的是强制要求子类去实现test()方法。要想调用test()方法,必须在子类里先进行实现。所以当然调用的是子类中的test()方法啦。
warmweb 2011-04-01
实例A的test方法,是父类的test方法,也是接口C的test方法;
因为B实现了C接口,可是B是抽象类,并没有实现test方法;A继承了B,实现了test方法,也就是实现了接口C的test方法。

我的理解,望多讨论!
hongbiangoal 2011-05-25
  
hxy8846025 2011-06-09
下面是eclipse 自动生成的代码,是@Override.
public class C extends B implements A {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

C test=new C();
test.test();

}
@Override
public void test() {
// TODO Auto-generated method stub
System.out.println("hehe");
}
Global site tag (gtag.js) - Google Analytics