内部类 匿名内部类用的最多,其他的了解下就好
类的五大成员
属性,方法,构造方法,代码块,内部类
内部类 一个类的里面再定义一个类,这个类就是内部类
内部类表示的事物是外部类的一部分
应用: 一个对象可能是多个对象组成的,
例如汽车类可以有引擎属性,发动机属性等等
但是一个单独的属性很难描述引擎或者发动机,那么就需要对其进行封装
访问特点
内部类可以直接访问外部类的成员,包括私有
外部类要访问内部类的成员,必须创建对象
内部类的分类
成员内部类
写在成员位置的类,属于外部类的成员
可以被private default protected public static等修饰
成员内部里
jdk16前不能定义静态变量
之后可以
创建对象
1在外部类中编写方法,对外提供内部类对象
2直接创建:外部类名.内部类名 对象名=外部类对象.内部类对象;
访问方式
就近原则
格式 内部访问外部变量。Outer.this.变量名
静态内部类
静态内部类也是成员内部类的一种
成员内部类用static修饰就是静态内部类
静态内部类只能访问外部类中的静态的东西
如果想要访问非静态的需要创建外部类对象
创建对象
外部类名.内部类名 对象名 = new 外部类名.内部类名()
调用方式
1先创建对象,用对象调用
2外部类名.内部类名.方法名();
局部内部类
将内部类定义在方法中,就是局部内部类,类似方法中的局部变量
不能被权限修饰符修饰
外界无法直接使用,要在方法内部创建对象才能使用
该类可以访问外部类的成员,也可以访问方法内的局部变量
**匿名内部类**
格式: new 父类名或接口名(){重写方法};
就是一个可以没有名字的类,简化书写。实现了想要实现的接口,要重写里面的方法
创建对象 父类名或接口名 对象名=new 父类名或接口名 ();
条件 继承或者实现关系
方法的重写
创建对象
可以直接用创建内部类的格式来创建类对象
父类名或接口名 对象名=new 父类名或接口名(){重写方法};
然后得到父类或接口对象,然后可以用接口多态或者多态调用
还可以用new 父类名或接口名(){重写方法}.equal方法等,直接调用
应用: 当方法的参数是接口或类时,可以传递这个接口的实现类对象或子类对象
如果实现类或子类只使用一次,就可以用匿名内部类简化代码
(有些匿名内部类可以用lambda表达式来简化)