一般来说开发用的比较少,但是匿名内部类是可以当做形式参数进行传递的.
关于内部类
A:内部类概述:定义在类中的类叫做内部类
B:内部类访问特点
a:内部类可以直接访问外部类的成员,包括私有。
b:外部类要访问内部类的成员,必须创建对象。
外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner oi = new Outer().new Inner();
C:private 修饰内部类
需要对外提供公共的创建内部类的方法,才能使用
Inner i = new Inner();
D:static 修饰内部类
外部类名.内部类名 对象名 = 外部类名.内部类对象;
Outer.Inner oi = new Outer.Inner();
E:局部内部类访问局部变量,局部变量必须用final修饰
因为当调用这个方法时,局部变量如果没有用final修饰,他的生命周期和方法的生命周期是一样的,当方法弹栈,这个局部变量也会消失,那么如果局部内部类对象还没有马上消失想用这个局部变量,就没有了,如果用final修饰会在类加载的时候进入常量池,即使方法弹栈,常量池的常量还在,也可以继续使用
Outer{
method() {
final int a = 10;
Inner {
}
}
}
但是jdk1.8取消了这个事情
[Java] 纯文本查看 复制代码 package com.itheima.exam.time1;
public class Test5 { //Test5为基本测试类
/**
* 如何调用内部内的方法
*/
public static void main(String[] args) {//测试类主方法
/*Person p = new Person();//第一种方法:1.先创建一个外部类对象P
p.show(); //2.调用成员方法show(),然后在show()方法中创建Student对象s,通过s.method()调用内部类中的方法 */
Person.Student ps = new Person().new Student(); //第二种方法:创建内部类对象
ps.method(); //直接调用内部类中的method()方法
//注意:如果内部类被私有,即private class Student{},
//此时第二种方法不能使用,因为私有的内部类不能被直接访问,此时如果需要调用内部类中method()方法只能通过第一种方法.
}
}
class Person { //Person外部类
int a = 10; //Person类的成员变量
class Student { //Student内部类,也可以将其看作是Person类的一个成员.
public void method() { //内部类中的method()方法
System.out.println(a);//可以直接方法外部内的成员变量a
}
}
public void show(){ //Person类的成员方法
Student s = new Student();
s.method();
}
} |