2010-09-04 2 views
1
class A 
{ 
    public void Foo() {} 
} 

class B extends A 
{ 
} 

class C extends B 
{ 
    public void Foo() {} 
} 

Действительно ли C's Foo() переопределяет A, даже если B не переопределяет его? Или мне нужно добавить заглушку в B, которая вызывает метод super для каждого из них, который я хочу переопределить в C?Переопределение метода в суперклассе суперкласса в java?

+1

Да, это будет переопределять реализацию А для экземпляров, если только C. Экземпляры A и B будут использовать A.Foo(). – dsmith

ответ

6

Несмотря на то, что B не упомянул об этом, Foo все равно должен быть доступен ему из-за наследования. По расширению, тогда Foo также доступен подклассу C и должен быть переопределен благодаря полиморфизму.

Экземпляры C, следовательно, будут использовать c.foo() (однако это определено), где, поскольку экземпляры A и B будут использовать a.foo(), потому что они еще не были переопределены.

+0

Предположительно тогда: A a = новый C(); a.Foo(); вызовет C.Foo()? –

+1

Erm, да, но это довольно запутанное соглашение об именах для ваших переменных. – Andy

0

Да С переопределяет Foo() А.

Это связано с наследованием, хотя Б не переопределяет Foo(), Foo() наследуется из А В.

И как C extends B, Foo() наследуется C, а переопределение происходит, когда C определяет Foo().

Смежные вопросы