首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java参数传递

Java参数传递
EN

Stack Overflow用户
提问于 2012-12-30 15:28:45
回答 3查看 809关注 0票数 0

我对下面的代码感到困惑。这段代码是由其他人编写的,我目前正在研究这段代码,以便更好地理解Java中参数传递的工作原理。

代码#1

代码语言:javascript
复制
addKeyListener((KeyListener)new TAdapter());

和代码#2

代码语言:javascript
复制
addKeyListener(new TAdapter());

假设TAdapter是一个扩展了KeyAdapter类的类,这意味着什么并执行同样的事情?我还注意到,我不必显式地将TAdapter对象转换为KeyListener,尽管从我在Eclipse中读取的方法描述来看,该方法接受一个KeyListener对象。为什么这是可能的?我对Java docs中的KeyAdapter类进行了快速搜索,显然是KeyAdapter类实现了KeyListener接口。那么,我是否可以安全地假设Java在参数传递中的工作方式之一是,该方法可以接受从某个类继承的类的实例,该类实现了方法描述中列出的同名接口?如果是这样,为什么这也是可能的呢?

顺便说一句,我不明白为什么程序员把这个类命名为TAdapter,T代表什么?我在其他源代码中也注意到了这种类型的类命名,但我从未理解过这种假定的约定。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-30 15:35:53

是的,“该方法可以接受从实现接口的某个类继承的类的实例”,这是事实。

更广泛地说,从多态的角度来看,对接口进行implements的类可以说是该接口的子类,并且任何参数或变量都可以被赋予其声明的类的任何子类的实例。

至于为什么这个类被命名为TAdapter,我恐怕不能回答。至少,这不是任何通用的约定。:)

票数 1
EN

Stack Overflow用户

发布于 2012-12-30 15:40:46

如果一个方法以ObjectParameter作为参数,它也可以接受SubClassOfObjectParameter,这是由于的多态性

TAdapter开头的T是一种糟糕的命名风格,因为它很隐蔽!

票数 1
EN

Stack Overflow用户

发布于 2012-12-30 16:09:24

所以,我可以放心地假设,

在参数传递中的工作方式之一是,方法可以接受继承自某个类的类的实例,该类实现了方法描述中列出的同名接口?

如果是这样,为什么这也是可能的?

这是因为多态。你应该读一下this。特别是多态部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14089049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档