java 使用接口和抽象类的多态性

oxiaedzo  于 4个月前  发布在  Java
关注(0)|答案(1)|浏览(62)
abstract class B extends A implements C {

// why I have to add implementation here for add() function

}
class A{
    void add(){        
    }
}
interface C{
    void add();

}

字符串
我希望我不需要在抽象类B中实现add()方法,为什么会发生这种情况?

5t7ly7z5

5t7ly7z51#

接口的一个奇怪之处在于,它们包含的所有成员都是 * 固有 * public。而在类中,它们是固有的包私有的。(如:如果你没有指定访问修饰符(publicprivateprotected)-在接口中,那么事情就是public,在类中,它们是包私有的)。
因此,class A中的add()是包私有的,而interface C中的add()是公共的。你不能降低访问级别-如果你实现C,你的void add()方法必须也是public(或任何更高的访问级别,但public已经是最高的)。
如果您在A类中设置add(),则一切都很好。
请注意,您得到的错误是:

Test.java:1: error: add() in A cannot implement add() in C
abstract class B extends A implements C {
         ^
  attempting to assign weaker access privileges; was public
1 error

字符串
这真的说明了一切,不是吗?为了将来的参考,当问关于SO的问题时,你应该包括这样的东西。错误不是用火星语写的巫毒魔法。你可以阅读它们,它们往往指向问题。

相关问题