Я новичок в программировании на Java и Android. Насколько я знаю, findViewById
был определен в родительских классах, и мне просто интересно, почему метод findViewById
может вызывать без super
ключевое слово в классе child.Зачем findViewByID может звонить без супер ключевого слова
ответ
Без переопределения метода findViewById
в дочернем классе super
и this
эквивалентны в рамках класса Activity.
Вы можете сделать this.findViewById()
или ActivityName.this.findViewById()
, но это является излишним, если внутри анонимного класса (то есть, когда вы должны использовать ActivityName.this
, но это выходит за рамки вопроса)
связанный с этим вопрос, чтобы спросить: Почему Безразлично» t setContentView
нужен super
?
>> Но представление, которое вы пытаетесь найти, относится к этому классу, а не к суперклассу, и реализация родительского класса отлично работает, поэтому нет необходимости переопределять IMO ..... Я думаю, что эта строка не имеет отношения, –
и 'this' и' super' не являются эквивалентными, 'this' обычно относится к текущему контексту, поэтому, если вы находитесь внутри анонимного класса (например, View.OnClickListener),' this' будет означать 'OnClickListener' не «Активность» –
@MoshErsan Fair points. Отредактировано для уточнения –
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 пожалуйста, проверьте
- 1. Зачем создавать тосты без нового ключевого слова?
- 2. Метод Переопределение с использованием ключевого слова супер
- 3. Эквивалент супер ключевого слова в C#
- 4. Влияние ключевого слова «Супер» в подклассах «Исключение»
- 5. TemplateSyntaxError без ключевого слова
- 6. Использование ключевого слова «супер» при ссылках на свойства суперкласса java
- 7. [SQLAlchemy] SyntaxError: без ключевого слова агда после ключевого слова арг
- 8. SQLAlchemy SyntaxError: ARG без ключевого слова после ключевого слова арг
- 9. SyntaxError: без ключевого слова аргумента после аргумента ключевого слова
- 10. без ключевого слова агд после ключевого слова арг
- 11. Зачем мне звонить new без сохранения ptr?
- 12. Закрытие Php без использования ключевого слова
- 13. как вызвать метод базового класса по супер ключевого слова
- 14. Twitter Streaming без ключевого слова
- 15. ConcurrentHashMap без синхронизированного ключевого слова
- 16. SyntaxError: без ключевого слова xlwings
- 17. Понимание конкретного использования ключевого слова «супер» в Rust
- 18. Зачем мне звонить ArrayList.ToArray?
- 19. findViewById вызывает сбои. Зачем?
- 20. В TypeScript, может ли класс использоваться без «нового» ключевого слова?
- 21. Python: супер ключевого слова вызова от дочернего класса
- 22. Установка начального местоположения в JFrame с использованием ключевого слова «супер»
- 23. Вызов ключевого слова «супер» с модулями и наследованием
- 24. Зачем мне звонить do_action ('wp_footer')?
- 25. Использование ключевого слова return без возвращаемого значения?
- 26. Зачем звонить setResult в BroadcastReceiver?
- 27. Приложение Iphone. Crash без ключевого слова self
- 28. Typcript - ошибка «этого» ключевого слова
- 29. Полиморфизм без использования виртуального ключевого слова
- 30. Приращение переменной без использования статического ключевого слова
В каких случаях вы думаете, 'super' ссылка помогает? –
Вам нужно использовать супер только в том случае, если вы хотите вызвать реализацию в родительском классе, если вы переопределили реализацию в текущем классе. Если у вас нет переопределения, то 'super.findViewById()' и 'findViewById()' эквивалентны. – javanut13