在Java中,如果我有ClassA
扩展ClassX
并实现InterfaceY
,ClassX
和InterfaceY
都有{{1}那么为什么我不必在methodC()
中提供methodC()
的实现?它是某种方法重载吗?
答案 0 :(得分:2)
因为如果ClassX
的实施methodC()
和ClassA
延伸ClassX
,那么ClassA
确实的实施methodC()
- ClassX
的实施。
如果ClassA
拥有自己methodC()
的实现,则称为方法覆盖 - ClassA
的实施方式覆盖其超类(ClassX
)的实现。
重载完全是一个不同的问题:当一个类有多个具有相同名称/返回类型且采用不同参数的方法时,就会发生重载。当您希望能够使用不同的输入执行相同或类似的操作时,这非常有用,它与重写无关,当您拥有一个特定方法的实现的子类时,这很有用需要与超类的不同。
请参阅here,了解有关它们之间差异的有用讨论。
答案 1 :(得分:0)
非常简单,
实际上,当您扩展该类时,所有非私有属性和方法都会继承到子类。
所以在你的情况下
class X{
//method C implemented here
}
interface Y{
//method c declaration
}
class A extends X implements Y{
//method C implemented here comes from class X
}
所以不需要再提供它。