内部类
对于一个.java文件中可以定义多个class类,
但最多只能有一个public 的类,且如果是public 的类,则类名要求必须跟文件名一致
内部类: 下一个class类定义的内部,又出现了其它类的定义。
根据内部类出现的位置不同,分为:
1. 成员内部类
1.1 出现位置:类中成员变量位置
1.2 特点:
可以访问外部类中定义的所有成员(包含private)
内部类中不能包含静态方法和变量的定义
1.3 内部类方法的使用:
初始化和成员变量一样,先实例化对象,,调用时在方法名后加()
外部类名.内部类名 对象名 = new 外部类().new 内部类();
对象名.方法名();
Demo3.Demo2 demo = new Demo3(). new Demo2();
demo.method();
2. 静态内部类
2.1:定义格式
只是在成员内部类修饰符中加了static
public class Demo4{
public static class Inner{
public void method(){
}
}
}
2.2静态内部类方法的使用
第一种方式:和成员内部类相似,但后面的类不用加new
Demo4.Inner inner = new Demo4.Inner();
inner.method();
第二种方式:直接用类名调用
Demo4.Inner.method();
3. 局部内部类
- 出现位置: 方法体内部
- 特点: 无法在局部内部类中定义静态内容;外部类的外部无法访问到内部类;类中无法修改外围的变量
4.匿名内部类(常用)
针对的是抽象类和接口,因为抽象类和接口都不能实例化
- 抽象类:
抽象类无法直接实例化,所以系统自动定义了一个内部类(抽象类内部),继承了抽象类,然后实例化内部类
抽象类名 变量名 = new抽象类(){
@Overrider //方法重写
public void method2(){
}
}
//方法调用
变量名.method2();
2. 接口:
类似于抽象类