1.接口
1.引用数据类型
2.特殊的抽象类(可以定义抽象方法)
3.接口为功能(抽象功能)的集合、
4.class定义类,用interface定义接口
5.接口多实现,类是单继承
6.继承与实现非常像 子类有权使用父类(接口)的功能和属性
子类继承父类,可以不重写方法直接使用
实现类实现一个接口,但都为抽象功能,需要实现类自己重写,侧重点关注编写
7.定义开发规范(不同类实习接口,方法名参数都一致,规范)
8.实现解耦,降低耦合度(类似与USB接口,需要适配规则才能适用,不是为某一个外界设备进行设计,而是适配所有适合的设配)。
注意:对于继承关系,耦合度是比接口高的,他是特定于为某些子类服务的,但接口不是,他是一个定义规范,使用用所有符合规则的实现。
2.内部类
类中定义的类
外部类 内部类
分类:
成员内部类:内部类定义在成员的位置(可以继承和实现)具有成员的特点,可以被成员修饰符修饰....
注意:成员内部类不能定义静态内容,除了静态常量
成员内部类中可以直接使用外部类的成员,包括私有。
外部类中可以通过成员内部类调用成员内部类属性或功能
通过外部类对象去创建内部类的对象,通过成员内部类对象调用成员内部类成员。
成员内部类与外部类成员重名问题:
私有内部类:
私有内部类:被private关键字修饰的成员内部类
私有内部类可以直接使用外部类的成员,包括私有的
在外部类中,可以直接new 内部类对象 调用成员
私有内部类只能在当前外部类中使用,在其他类中无法使用
静态内部类:
被static修饰的内部类
静态内部类中可以定义静态内容(不能直接使用外部类成员,需要根据对象才能调用)
在静态内部类可以直接使用静态内容,需要通过外部类对象调用外部类成员
使用:
外部类.内部类 名 = new 外部类.内部类();
局部内部类:
定义在局部位置
局部内部类可以定义成员内容,不可以定义静态内容,除了静态常量
只能在局部内部类所在的方法中通过对象访问成员
如果在局部内部类中使用所在方法中局部(参数),要求局部变量被fianl修饰
如果在jdk1.8只会版本默认被final修饰
对于外部类的成员变量的值,影响的是所有内部类对象
对于调用局部外部类的方法中的局部变量必须定义为常量
***匿名内部类:
作用:简化实现类|子类,没有自己类本身作用的实现类|子类
1.匿名对象:只能在当前位置使用一次
2.引用指向匿名内部类对象
3.匿名内部类对象作为方法的实参
匿名内部类对象:实现类|子列+创建对象 一步搞定创建匿名内部类对象和匿名内部类类体。
new 接口{}接口实现类类体
匿名内部类理解起来是比较抽象的,他通过直接new接口 + 实现类类体,创建一个匿名实现类对象,我们可以通过我们既然通过接口实例化对象,我们就需要对这个接口的抽象方法进行一个补全操作。
3.lamba表达式
作用:简化匿名实现类对象
前提:函数式接口(这个接口只有一个必须被重写的抽象方法)
强制检查是否为函数式接口:@FunctionalInterface
语法:1. ()->{}
() : 接口中抽象方法的参数列表
-> : lambda符号|箭头函数
{}:重写的方法体
2.如果方法体语句只有一句,前后的{}可以省略
3. 如果方法存在参数,参数的类型可以省略
4.如果参数只有一个,前面的括号可以省略
5.如果lambda语句只有一句,前后的{}与return关键字可以一起省略