定义:如果一个类定义在另一个类的内部,这个类就是内部类
内部类包括:成员内部类,静态内部类,局部内部类,匿名内部类(重点)
------------------------
成员内部类:是类中的一个普通成员,相当于成员方法,成员变量
注意:成员内部类是直接可以访问主类(外部类)的方法,变量,其都是在一个类下的。
1.当在内部类的进行输出值时如果内部类里面有定义该值:如果直接进行输出则输出的值是方法中的值,如果需要输出内部内中的数据需要用到this. 来获取当前对象的内部类的数据
2.如果在主类中也有数据需要访问主类中的数据的时候可以用主类名.this.数据名称
此处可以清晰明白到当进行创建类时就是一个类了
此时public class Outer{ //一个类
public class Inner{
//此处为一个成员内部类
private String name;//普通的成员变量,也可以在内部类中对其进行创建方法如get,set方法
public static String schoolName;//在jdk16之后开始 在成员内部类可以定义静态成员(方法,变量)
}
public void test(){ //方法
}
}就是一个类
用成员内部类来进行创建对象:
外部类(/主)的名称.内部类的名称 对象名称=new 外部类(/主)类的名称().new 内部类的名称 ();即可
即:不能直接用成员内部类来进行创建对象,需要先创建上一级的对象在进行创建对象即可
-------------------------------------------
静态内部类:
用静态内部类创建对象时:外部类(/主)的名称.内部类的名称 对象名称=new 外部类(/主)类的名称().new 内部类的名称 ();即可和成员内部类相同
注意:静态内部类的对象可以直接进行访问外部的静态成员,但不能直接访问实例成员(但可以用外部类的对象的属性功能来进行调用)
------
用static进行修饰
------
此时public class Outer{ //一个类
public static class Inner{
}//静态内部类 ,也可以在静态内部类中对其进行创建方法如get,set方法
private String name;
}
}
------------------------------------------
局部内部类(无实际意义)
------------------------------------------
匿名内部类:重点
匿名内部了类:是一种特殊的局部内部类;所谓匿名:指程序员不需要为这个类声明名字
下句的类或接口是已经写过的;
格式:new 类或接口(参数值...){
类体(一般为方法的重写);
}//这时该既是子类/实现类,也是子类/实现类的对象,可以在编译后的文件进行查看
重要特点的使用:由于匿名内部类既做子类/实现类及其对象
所以可以直接在创建匿名内部类时 使用 类或接口名(有实现类了)来创建对象进行接受这时就可以创建方法将接口名放在参数中,可以用于接受所有对象来进行方法的统一使用
例 格式: 类或接口(的名称) 对象名称 = new 类或接口(参数值...){
类体(一般为方法的重写);
}/
------
匿名内部类的常见使用场景:
重要特点的使用:由于匿名内部类既做子类/实现类及其对象
所以可以直接在创建匿名内部类时 使用 类或接口名(有实现类了)来创建对象进行接受这时就可以创建方法将接口名放在参数中,可以用于接受所有对象来进行方法的统一使用 该流程叫回调 相当于中间赋值了一圈最终在方法中用原对象进行
例 格式: 类或接口(的名称) 对象名称 = new 类或接口(参数....){
类体(一般为方法的重写);
}/
正常方法流程 (参数为类或接口的名称 形参名称)
例子:
-------------------
匿名内部类的深入用法:以gui编程(桌面程序界面,一般不用java写,java太严格繁琐,效率不高)来进入了解
可以作为调用接口