关于代码中onClickListenerObj字段的数据类型及相关语法的技术问询
解答你的Android代码疑问
先把你给出的代码贴出来方便参考:
View.OnClickListener onClickListenerObj = new View.OnClickListener() { @Override public void onClick(View view) { //some logic. } };
咱们逐个拆解你的问题:
1. onClickListenerObj字段的数据类型是什么?
onClickListenerObj的编译时数据类型就是View.OnClickListener——没错,就是那个接口类型。在Java里,接口完全可以用来声明变量,只要这个变量指向的对象实现了该接口就行,这是多态的核心用法之一。
2. 接口无法实例化,那onClickListenerObj的实际类型是什么?
你说得对,接口本身不能直接实例化,这里的new View.OnClickListener()并不是在创建接口的实例,而是在创建一个实现了View.OnClickListener接口的匿名内部类的实例。这个匿名类没有自己的名字,它的唯一作用就是实现OnClickListener接口里的onClick方法,而onClickListenerObj变量的实际运行时类型就是这个匿名内部类。
3. 此处使用new关键字的作用是什么?
这里的new关键字用来创建刚才说的那个匿名内部类的实例,而不是实例化接口。你可以把这段代码理解成:
- 临时定义了一个没有名字的类,这个类实现了
View.OnClickListener接口 - 重写了接口要求的
onClick方法 - 立刻创建这个匿名类的一个对象,把它赋值给
onClickListenerObj变量
4. OnClickListener是否属于View类的构造函数?
完全不是!OnClickListener是View类内部定义的一个回调接口,用来处理点击事件。构造函数的名字必须和类名完全一致(这里类名是View),而OnClickListener是一个独立的接口名,和构造函数没有任何关系。
内容的提问来源于stack exchange,提问作者Tom Shaw
相关产品推荐
相关产品推荐

