我对下面的代码感到困惑。这段代码是由其他人编写的,我目前正在研究代码以更了解参数传递在 Java 中的工作原理。
代码#1
addKeyListener((KeyListener)new TAdapter());
和代码#2
addKeyListener(new TAdapter());
假设 TAdapter 是扩展 KeyAdapter 类的类,意味着相同的事情并执行相同的事情?我还注意到我不一定必须将 TAdapter 对象显式转换为 KeyListener,即使从我在 Eclipse 中阅读的方法描述中该方法接受 KeyListener 对象也是如此。为什么这可能?我从 Java 文档中快速搜索了 KeyAdapter 类,显然 KeyAdapter 类实现了 KeyListener 接口。所以我可以安全地假设 Java 在参数传递中的工作方式之一是该方法可以接受一个类的实例,该类继承自实现方法描述中列出的同名接口的某个类?如果是这样,为什么这也是可能的?
PS 顺便说一句,我不明白程序员为什么将类命名为 TAdapter,T 代表什么?我在其他源代码中也注意到这种类型的类命名,但我从来不理解这种假定的约定。