目录
内部类(重点:各类的定义与使用)
pubilc class OuterClass{
//成员变量和方法
class InnerClass{ //一个内部类的定义
//成员变量和方法
}
}
成员内部类
结:定义在外部类的类体中;
没有使用static修饰;
可使用private、public等修饰符;
创建对象要具有外部类的引用。
使用的相关代码
private int a = 0;
public class InnerClass{ //成员变量的定义
int b = 1;
public int calaulate(){
return a + b; //理解外层类成员a时可以去联想一下 全局变量 的使用
}
}
public void makeInner(){
InnerClass ic = new InnerClass(); //创建内部类对象
system.out.println(ic,calculate());
}
main://输出
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
System.out.println(inner.calculate());
局部内部类
注意:在哪里定义就要在哪里使用
结:定义在方法体或语句块内的类;
不能使用访问修饰符;
可访问外层类的成员。
like局部变量一样去使用;
在方法体外部不能创建InnerClass类的对象,但可以访问外层类的实例变量,访问方法的参数,访问方法final局部变量。
相关代码:
class InnerClass(){
system.out.println(x); //外层类的实例变量
system.out.println(y); //访问方法final局部变量
system.out.println(param); //访问方法的参数
}
new InnerClass().seeOuter();
匿名内部类
(没有名字的类)
结:类定义与常见实例在一处完成;
可继承一个类或实现一个接口;(不能同时继承,也不能继承多个)
应用在事件处理和Lambda表达式。
适用环境:
某个类的实例只使用一次时,将类的定义与实例创建在一起,或者在定义类的同时就创建一个实例。
声明和构建的一般格式:
new TypeName(){
//此处为类体
}//返回一个对象引用
类体中不能定义构造方法。
使用模板:
直接使用或赋给一个引用变量
TypeName obj = new TypeName(){
//此处为类体
};
or
作为方法调用的参数
someMethod(new TypeName(){
//此处为类体
});
代码举例:
Animal dog = new Animal(){ //这里继承了Aniimal类,并且创建了一个匿名类实例,用dog指向它
@override //方法重写
public void eat(){
System.out.println("I like eat bones.");
}
}; //这里的分号“;”是赋值语句的结束
dog.eat();
静态内部类
结:定义在外部类的类体中且用static修饰;
只能访问外层类的static成员;
创建实例不需要外部类的引用。