2016-09-21 11 views
0

Для следующего кода:Java: Конвенция/практика для вызова методов родительского класса

`

Class A 
{ 
method1(); 
method2(); 
} 

Class B extends A 
{ 
method1(); 
method3(); 
}` 

В классе B, реализация method3 выглядит следующим образом:

method3() 
{ 
this.method1(); // For calling method1 in class B 
super.method1(); // For calling method1 in parent class A 

// Following statements call method 2 in parent class 
method2();  // 1 doesn't seem to be right practice 
this.method2; // 2 is more readable in case method2 is overridden in this class 
super.method2();// 3 improves readability IMO 
} 

Какой из 3 рекомендуется метод вызова метода2?

+2

Вызов super.method() довольно редок, особенно если не вызывать из переопределения этого метода. Никто не ожидал этого, поэтому лучше всего этого избежать. Поэтому добавление 'this.' в вызов метода - это просто лишняя информация. –

+1

Вы использовали бы только метод super.method(), если у вас есть переопределенный метод2() внутри класса B. –

+0

Я понимаю, что как 1 & 2 приведет к «this.method2()», когда код скомпилирован, и был заинтересован в зная, какой из них является предпочтительным способом его вызова. Включение метода1(), я видел некоторые сообщения, которые сказали - «this.method1()» должен быть предпочтительным способом его вызова, чем «method1()» в качестве хорошей практики. –

ответ

0

TL; DR:

Использование this. для вызова методов бесполезно. Использование метода super. для вызова методов необходимо для исключения бесконечной рекурсии.

Для вызова методов как this.foo(), так и foo() выполните то же самое: вызовите самую производную версию данного метода. (Для доступа к переменным-членам все по-другому). В Java AFAIK нет способа вызвать «этот метод» этого класса ».

super обычно используется в контексте переопределяющих методов, чтобы вызвать реализацию метода базового класса. Если вы опустите super., вы получите метод, называющий себя и потенциально с бесконечной рекурсией. Если вы используете super.method() в любом другом контексте, вы, вероятно, испортили свою иерархию классов.