匿名内部类(new类时覆盖类中方法)
2024-09-28 22:42:19
public class Person {
private String name ; protected String getName() {
return name;
} public void setName(String name) {
this.name = name;
}
}
ublic class MethodOverrideTest {
public static void main(String[] args) {
Person person = new Person(){
@Override
public String getName() {
return "123";
}
};
System.out.println(person.getName());
}
}
内部类通常都含有回调,引用那个匿名内部类的函数执行完了就没了,所以内部类中引用外面的局部变量需要是final的,这样在回调的时候才能找到那个变量,而如果是外围类的成员变量就不需要是final的,因为内部类本身都会含有一个外围了的引用(外围类.this),所以回调的时候一定可以访问到。
例如下面:
private Animator createAnimatorView(final View view, final int position) {
MyAnimator animator = new MyAnimator();
animator.addListener(new AnimatorListener() {
@Override
public void onAnimationEnd(Animator arg0) {
Log.d(TAG, "position=" + position);
}
});
return animator;
}
内部类回调里访问position的时候createAnimatorView()早就执行完了,position如果不是final的,回调的时候肯定就无法拿到它的值了,因为局部变量在函数执行完了以后就被回收了。
最新文章
- Adb connection Error:远程主机强迫关闭了一个现有的连接
- SQL数据库: 错误2812 未能找到存储过程 sp_password
- (转)awk实例练习(一)
- 颜色之RGBA
- 关于group by【转载】
- ACM:回溯,八皇后问题,素数环
- 使用commons-csv简单读写CSV文件
- 接口测试工具-Jmeter使用笔记(六:从文本读取参数)
- JVM 内部原理(六)— Java 字节码基础之一
- vue2.0 移动端,下拉刷新,上拉加载更多 插件
- windows 7 开启无线wifi
- 采用DTO和DAO对JDBC程序进行进一步优化
- 在普通Java类里使用spring里注入的service、dao等
- mysql 配置数据库主从同步
- JS修改标签中的文本且不影响其中标签
- textarea文本域的高度随内容的变化而变化
- tcp-full.cc
- maven常用依赖总结
- vue项目中禁止移动端双击放大,双手拉大放大的方法
- CodeForces-999D Equalize the Remainders