2016-10-26 2 views
-3

Я новичок в программировании на Java и Android. Насколько я знаю, findViewById был определен в родительских классах, и мне просто интересно, почему метод findViewById может вызывать без super ключевое слово в классе child.Зачем findViewByID может звонить без супер ключевого слова

+0

В каких случаях вы думаете, 'super' ссылка помогает? –

+1

Вам нужно использовать супер только в том случае, если вы хотите вызвать реализацию в родительском классе, если вы переопределили реализацию в текущем классе. Если у вас нет переопределения, то 'super.findViewById()' и 'findViewById()' эквивалентны. – javanut13

ответ

-1

Без переопределения метода findViewById в дочернем классе super и this эквивалентны в рамках класса Activity.

Вы можете сделать this.findViewById() или ActivityName.this.findViewById(), но это является излишним, если внутри анонимного класса (то есть, когда вы должны использовать ActivityName.this, но это выходит за рамки вопроса)

связанный с этим вопрос, чтобы спросить: Почему Безразлично» t setContentView нужен super?

+0

>> Но представление, которое вы пытаетесь найти, относится к этому классу, а не к суперклассу, и реализация родительского класса отлично работает, поэтому нет необходимости переопределять IMO ..... Я думаю, что эта строка не имеет отношения, –

+0

и 'this' и' super' не являются эквивалентными, 'this' обычно относится к текущему контексту, поэтому, если вы находитесь внутри анонимного класса (например, View.OnClickListener),' this' будет означать 'OnClickListener' не «Активность» –

+0

@MoshErsan Fair points. Отредактировано для уточнения –

0

super ключевое слово относится к SuperClass (родительский класс) реализации, поэтому при вызове super.findViewById(...) вы обращаетесь SuperClass реализацию метода, а так как ваш SubClass не переопределять этот метод; super.findViewById(...) и findViewById(...) эквивалентны.

Но если вы отмените его, это будет иметь значение. вот пример:

class MyActivity extends Activity{ 

    void onCreate(....){ 
    View fromParentView = super.findViewById(...); 
    View fromThisView = findViewById(...); 
    } 

    View findViewById(int resId){ 
    throw new IllegalArgumentException(); 
    } 
} 

это первый fromParentView будет работать правильно, но fromThisView сгенерирует исключение

https://docs.oracle.com/javase/tutorial/java/IandI/super.html пожалуйста, проверьте

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