44,如果在内部类的方法中,想使用局部变量,内部类的成员变量,外部类的成员变量,分别应该怎么实现?
局部变量:直接使用
内部类的成员变量:通过 this. 的形式调用
外部类的成员变量:通过 外部类名.this. 的形式调用
45,局部内部类访问局部变量,该局部变量必须加final修饰,为什么?
因为局部变量的生命周期是依赖于方法,方法调用完毕后,局部变量就释放了,如果此时局部内部类对象还在使用局部变量,就会报错,所以该局部变量必须加final修饰,就是为了延长局部变量的生命周期,但是JDK1.8取消了这个事情,所以我觉得这是一个Bug。
46,匿名内部类概述,前提,格式
概述:没有名字的(局部)内部类。
前提:必须得有一个类(一般是抽象类)或者接口。
格式:
new 类名或者接口名 () {
重写类或者接口中的所有抽象方法;
};
理解:其实匿名内部类就是实现了接口(或者继承了类)的匿名的子类对象
47,什么时候使用匿名内部类?
1、匿名内部类只针对重写一个抽象方法。
2、当我们看到一个方法的形参的数据类型是一个接口或者抽象类的时候,
就可以考虑使用匿名内部类。(实际开发中用到的非常多)
48,要求:使用已知的变量,在控制台输出30,20,10。
class Outer {
public int num = 10;
class Inner {
public int num = 20;
public void show() {
int num = 30;
System.out.println(?);
System.out.println(??);
System.out.println(???);
}
}
}
class InnerClassTest {
public static void main(String[] args) {
Outer.Inner oi = new Outer().new Inner();
oi.show();
}
}
49,按照要求,补齐代码
interface Inter { void show(); }
class Outer { //补齐代码 }
class OuterDemo {
public static void main(String[] args) {
Outer.method().show();
}
}
要求在控制台输出”HelloWorld”
//补齐代码:
public static void method(){
return new Inter(){ //返回的其实是一个,实现了Inner接口的子类的匿名对象
public void show(){
System.out.println(HelloWorld);
}
};
}