接口
- 概念
- 比抽象类更抽象的类
- 只描述所应具备的方法,并没有实现
- 将功能定义与实现实现分离,优化了程序设计
- 接口是功能的集合
- 接口的方法都是public abstract方法
- 接口的成员变量都是public final static变量
- 类 实现 接口,使用implements关键字
- 子类必须重写父类接口所有的方法,否则只能抽象类
- 接口不能实例化
- 接口:多继承 ,即接口可以继承多个接口
- 接口子类:多实现,即子类可以实现多个接口
- 多个类可以实现同一个接口,一个类可以实现爱你多个接口
接口思想
- 接口的出现扩展了功能
- 接口其实是暴露出来的规则
- 接口的出现降低了耦合性,即设备与设备之间出现了解耦
接口与抽象类
相同点:
- 都位于继承的顶端,用于被其他类实现或者继承
- 不能实例化
- 包含抽象方法,子类必须重写这些方法
区别:
- 抽象类可以包含非抽象方法,而接口只能有抽象方法
- 一个类只能继承一个直接父类,但是可以实现多个接口
匿名对象
概念
- 在创建对象时,只有创建对象的语句,却没有把对象地址赋值给某个变量
特点
- 没有变量名
- 只能使用一次
- 可以作为方法接收的参数 方法返回值使用
内部类
概念
- 将类写在其他类的内部,可以写在其他类的成员位置和局部位置
- 内部类可以自由访问外部类的成员变量
- 如果内部类是静态的,就不能访问外部类的静态变量
- 成员内部类
- 外部类名。内部类名 变量名 = new 外部类名()。内部类名();
- 成员内部类中不能存在任何static的变量和方法
- 成员内部类是依附于外部类的,只有先创建了外部类才能创建内部类
- 成员内部类可以无条件访问外部类的所有成员变量和成员方法
- 外部类要访问内部类的属性和方法,必须先创建内部类对象
- 内部类破坏了良好的代码结构,唯一的好处是不用创建外部类对象,内部类对象就可以任意访问外部类的成员变量
- 内部类中没有同名成员变量时,内部类会直接访问外部类的成员变量;有同名成员变量时,直接访问的是内部类的变量,若要使用外部类的变量,需要加this.属性名
局部内部类
- 外部类方法中:new 内部类。方法();
- 在外部类中调用此方法,会创建内部类对象
- 如果此时我们需要往外部类的方法中传入参数,需要用final修饰,没有特殊含义,只是一种形式
- 内部类中只能访问外部类方法中定义的final类型的局部变量,可以任意访问外部类的成员变量
- 主要解决编译问题
- 因为外部类中的局部变量是随方法存放在内存栈中的,方法结束这些局部变量就消失
- 而局部内部类跟其他类一样,是在内存堆中的,不会随方法结束而立马消失
- 出现一种问题:局部变量销毁了,而使用这些局部变量的局部内部类却依然在
- 所以才要求局部内部类使用的局部变量为final修饰的,这样会在内部类中拷贝一份该值,不会出现编译问题
静态内部类
- 使用static修饰成员内部类
- 只能访问外部类的静态属性和静态方法
- 使用外部资源,需要实例化外部类对象
- 创建时可以直接new出来对象
- 私有内部类
- 可以用private修饰内部类,这样只能在外部类内部创建内部类
内部类的实际使用–匿名内部类
- 使用内部类的原因:
- 适当java的多继承更加完整
- 方便将存在一定逻辑关系的类组织在一起,又可以对外界隐藏
- 方便编写事件驱动程序
- 方便编写线程代码
- 在类的内部, 将内部类的定义与创建放到一起完成,这种没有名字的类称为匿名内部类
- 匿名内部类可以继承或实现一个接口,也只能是一个
- 不能定义构造器,也不能new创建实例,也只是用一次.定义 构造,第一次使用一次完成.
- -
- 使用内部类的原因: