-2 java oop polymorphism
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();
}
Run Code Online (Sandbox Code Playgroud)
我期望我不需要add()在抽象类中实现该方法B。为什么会发生这种情况?
接口的一个怪癖是它们包含的所有成员本质上 public都是. 而在类中,它们本质上是包私有的。(如:如果您没有指定访问修饰符(public、private或protected) - 在接口中,那么问题是public,在类中,它们是包私有的)。
因此,add()inclass A是包私有的,而add()ininterface C是公共的。您不能降低访问级别 - 如果您实现 C,您的void add()方法也必须是public(或任何更高的访问级别,但public已经是最高的)。
如果你add()在A课堂上做到了这一点public,一切都会好起来的。
请注意,您收到的错误是:
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
Run Code Online (Sandbox Code Playgroud)
这确实说明了一切,不是吗?为了便于将来参考,当询问有关 SO 的问题时,您应该包括这样的内容。错误不是用火星语写成的巫毒魔法。你可以阅读它们,它们往往指出了问题。