2012-12-30 2 views
0

Я смущен о коде ниже. Этот код написан кем-то другим, и в настоящее время я изучаю код, чтобы больше понять, как работает передача параметров в Java. код # 1Передача параметров Java

addKeyListener((KeyListener)new TAdapter()); 

и код # 2

addKeyListener(new TAdapter()); 

означают

ли то же самое и выполнять то же самое, предполагая TAdapter класс, который расширяет класс KeyAdapter? Я также замечаю, что мне необязательно явно использовать объект TAdapter в качестве KeyListener, хотя из описания метода, которое я прочитал в Eclipse, метод принимает объект KeyListener. Почему это возможно? Я сделал быстрый поиск по классу KeyAdapter из документов Java и, по-видимому, класс KeyAdapter реализует интерфейс KeyListener. Я могу с уверенностью предположить, что один из способов работы Java в передаче параметров заключается в том, что метод может принимать экземпляр класса, который наследуется от определенного класса, который реализует интерфейс с тем же именем, указанный в описании метода? Если это так, почему это также возможно?

P.S. С другой стороны, я не понимаю, почему программист назвал класс TAdapter, что означает T? Я также замечаю этот тип имен классов в другом исходном коде, но я никогда не понимал этого предполагаемого соглашения.

+0

Я люблю вашу сторону вопрос. Вы имеете право спросить об этом. Хотя я обычно стараюсь не критиковать других программистов, я могу сказать, что «TAdapter» - ужасное имя. Похоже, он пытается адаптировать букву 'T' или что-то еще. (Да, я знаю, что это венгерская нотация для «type», но sheesh!) –

+0

Спасибо! Я буду уверен, что никогда не приму этот таинственный букву Т, назвав свой класс. Я ненавижу выбирать вредные привычки. – Nicholas

+0

OP не понимает концепций программирования, особенно Java. Соглашения об именах являются одним из них. –

ответ

1

Ну, да, это правда, что «метод может принимать экземпляр класса, который наследуется от определенного класса, который реализует интерфейс».

В общем случае класс implements интерфейс можно назвать подклассом этого интерфейса в терминах полиморфизма, а любому параметру или переменной может быть присвоен экземпляр любого подкласса его объявленного класса.

Что касается того, почему этот класс называется TAdapter, боюсь, я не могу ответить. По крайней мере, это не обычная конвенция. :)

+0

Ничего себе! Я никогда не знал, что класс, реализующий интерфейс, может быть подклассом этого интерфейса. Итак, TAdapter - это просто случайное имя класса? Мне показалось странным, что это имя класса совпадает с тем же именем во втором раз, когда я смотрю на исходный код. – Nicholas

+0

В этом весь смысл интерфейсов в Java. :) – Dolda2000

+0

О, я думал, что интерфейсы - это просто набор методов, которыми обладают все классы. – Nicholas

1

Если метод принимает ObjectParameter в качестве аргумента, она также может принимать SubClassOfObjectParameter из-за полиморфизма.

T в в начале TAdapter просто плохой стиль именования, потому что это загадочное!

+0

О, я вижу. Таким образом, полиморфизм делает это возможным. Я буду помнить о стиле плохого наименования. Спасибо Аврааму! =] – Nicholas

1

Так я с уверенностью предположить, что один из пути Java работает в параметре прохождения является то, что этот метод может принимать экземпляр класса, который наследует от определенного класса, который реализует интерфейс того же имени перечисленные в описании метода?

Да

Если это так, то почему это также возможно?

Это из-за полиморфизма. Вы должны прочитать this. Особенно в подразделе полиморфизма.

+1

Я еще больше понимаю полиморфизм. Спасибо, De Moon. – Nicholas

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