java学习笔记2--面向对象编程(12)


27.3 局部内部类
完整笔记
使用较少,一般使用匿名内部类
局部内部类只能在方法内部使用,出了方法就不能使用
27.3.1 匿名内部类 匿名内部类必须继承父类或实现接口 。匿名内部类对象只能使用多态形式引用,父类引用指向子类对象 。重写接口中所有的抽象方法是因为只有非抽象的类才能创建对象,除了抽象方法,匿名内部类中可以重写父类或接口中的任意方法来实现自己的需求 。
接口名称 变量名 = new 父类构造器(实参列表)|实现接口(){重写接口中所有的抽象方法};
27.3.2 练习
public class Test {public static void main(String[] args) {// 创建了一个Object类的子类对象重写了Object中的equals方法,并赋值给父类引用,// 所以使用对象o调用的是子类重写的方法Object o = new Object() {public boolean equals(Object obj) {return true; }};System.out.println(o.equals("Fred"));}}
27.3.3 匿名内部类的匿名对象
new 接口名称(){重写接口中所有的抽象方法}.方法();
27.3.4 注意事项
局部内部类中访问所在方法的局部变量时,这个局部变量必须是final的(java8之后可以省略) 。因为从生命周期角度来说,new一个内部类对象是在堆中,而局部变量在栈中,方法结束后出栈,局部变量消失,而内部类的对象还存在堆中,等待垃圾回收; 后边在说