interface I1 {
    int f1();
}
class C {
    public int f1() {
        return 1;
    }
}
class X extends C implements I1 {
    public int f1() {
        return 1;
    }
}X继承了C并且实现了I1接口,C和I1有相同名字的方法,我想问下,X里的方法是继承C的还是实现I1的?

解决方案 »

  1.   

    一楼说的对 既实现了接口里的方法,又重载了父类的方法,重载是巧合而已。首先  implements I1 所以 class X 必须实现f1()方法。其次  class C 里的f1() 方法是public的,和class X 的f1() 方法,返回值相同,参数列表也相同,
    这只能说是一种巧合,根据多态,class X重写了class C的f1()方法。最后如果 class C 里的f1() 方法是private的,那么class C 里的f1()方法就不会被 class X 所继承,因此就没有重载,只是实现。
      

  2.   


    我说错了,SORRY。把重写说成了重载,下面是修改。一楼说的对 既实现了接口里的方法,又重写了父类的方法,重写是巧合而已。首先 implements I1 所以 class X 必须实现f1()方法。其次 class C 里的f1() 方法是public的,和class X 的f1() 方法,返回值相同,参数列表也相同,
    这只能说是一种巧合,根据多态,class X重写了class C的f1()方法。最后如果 class C 里的f1() 方法是private的,那么class C 里的f1()方法就不会被 class X 所继承,因此就没有重写,只是实现。
      

  3.   

    你可以把接口当成光杆抽象类理解你这层关系,应该这么来说X继承了C,并重写了int fi()方法而C中的int f1()方法继承自接口I1也就是说 
    X x=new X();
    C c=new X();
    I1 i=new X();
    都是正确的,都是父类的引用指向子类的对象这里的
    x.f1()  c.f1()  i.f1() 调用的方法都是 X实例中的f1();do you understand? 
      

  4.   

    兄弟我觉得你有些走火入魔了,静下心看看接口的真正作用什么?sun为什么要创建接口这种东西。而不是纠结一些旁枝细末。