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的?
一楼说的对 既实现了接口里的方法,又重载了父类的方法,重载是巧合而已。首先 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 所继承,因此就没有重载,只是实现。
我说错了,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 所继承,因此就没有重写,只是实现。
你可以把接口当成光杆抽象类理解你这层关系,应该这么来说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?
这只能说是一种巧合,根据多态,class X重写了class C的f1()方法。最后如果 class C 里的f1() 方法是private的,那么class C 里的f1()方法就不会被 class X 所继承,因此就没有重载,只是实现。
我说错了,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 所继承,因此就没有重写,只是实现。
X x=new X();
C c=new X();
I1 i=new X();
都是正确的,都是父类的引用指向子类的对象这里的
x.f1() c.f1() i.f1() 调用的方法都是 X实例中的f1();do you understand?