-
接口(支持多态)
JDK1.8之前- 所有的属性都是公有静态常量
- 所有的方法都是公有的抽象方法
- 接口无法实例化对象,也没有构造器
- 接口只能作为父级使用
- 类可以实现多个接口,但类需要实现接口中所有抽象方法
- 接口可以继承多个接口
JDK1.8之后
新增两种类型方法(可以有代码体)
a 静态方法
static void staticMethod(){}
使用方式:接口名.staticMethod();
b 默认方法
default void defaultMethod(){}
使用方式:实现类对象.defaultMethod()
默认方法是可以被实现类重写
冲突:
(1)实现类是可以实现接口,同时可以继承父类
父接口和父类有相同方法,默认调用父类
(2)实现类可以实现多个接口
父接口1与父接口2有相同的默认方法
实现类必须重写该方法
1. 自己真正的重写
2. 选择其中的一个、几个或者都选
父接口.super.方法
2. 经典接口
2.1 java.lang.Comparable
自然排序
对比两个对象大小(指定根据什么比)
在需要对比的类上实现该接口
a 在Person类上实现该接口
b 实现该接口的抽象方法
c 方法体中实现比较规则
2.2 java.util.Comparator --> 定制排序
int compare(Object o1,Object o2)
注意:定制排序的优先级高于自然排序
Arrays.sort(数组, new Mycomparator()----<实现Comparable接口的自定义类>)2.2 java.util.Comparator
3. 内部类
类的五大成员之一。
分类:
成员内部类
静态成员内部类
方法(局部)内部类
匿名内部类
3.1 匿名内部类
new 类、抽象类、接口(){}
解析:大括号相当于类的子类,接口的实现类的大括号
优点:
简单一些(省略了创建类)
缺点:
复用性很差
JDK1.8 Lambda表达式对部分匿名类进行了简化
3.2 成员内部类
位置:类体中,和其他成员在同一级
class文件:外部类 内 部 类 . c l a s s 语 法 : 【 修 饰 符 】 c l a s s 类 名 { } 成 员 : 五 大 成 员 均 可 存 在 , 但 不 能 有 静 态 资 源 修 饰 符 : 四 个 访 问 修 饰 符 均 可 存 在 使 用 : a 内 部 类 如 何 使 用 外 部 类 的 资 源 ? 完 全 可 以 直 接 访 问 b 外 部 类 如 何 使 用 内 部 类 资 源 ? 通 过 实 例 化 内 部 类 对 象 c 外 部 其 他 类 如 何 使 用 内 部 类 ( 1 ) 需 要 外 部 类 对 象 O u t e r o u t e r = n e w O u t e r ( ) ; ( 2 ) 再 实 例 化 内 部 类 对 象 O u t e r . I n n e r i n n e r = o u t e r . n e w I n n e r ( ) ; 冲 突 问 题 解 决 外 部 类 和 内 部 类 的 属 性 或 者 方 法 重 名 t h i s . 内 容 t h i s 是 当 前 对 象 O u t e r . t h i s . 内 容 O u t e r . t h i s 外 部 类 对 象 3.3 静 态 成 员 内 部 类 位 置 : 类 体 中 , 和 其 他 成 员 在 同 一 级 c l a s s 文 件 : 外 部 类 内部类.class 语法: 【修饰符】 class 类名{} 成员:五大成员均可存在,但不能有静态资源 修饰符:四个访问修饰符均可存在 使用: a 内部类如何使用外部类的资源? 完全可以直接访问 b 外部类如何使用内部类资源? 通过实例化内部类对象 c 外部其他类如何使用内部类 (1)需要外部类对象 Outer outer = new Outer(); (2) 再实例化内部类对象 Outer.Inner inner = outer.new Inner(); 冲突问题解决 外部类和内部类的属性或者方法重名 this.内容 this是当前对象 Outer.this.内容 Outer.this外部类对象 3.3 静态成员内部类 位置:类体中,和其他成员在同一级 class文件:外部类 内部类.class语法:【修饰符】class类名{}成员:五大成员均可存在,但不能有静态资源修饰符:四个访问修饰符均可存在使用:a内部类如何使用外部类的资源?完全可以直接访问b外部类如何使用内部类资源?通过实例化内部类对象c外部其他类如何使用内部类(1)需要外部类对象Outerouter=newOuter();(2)再实例化内部类对象Outer.Innerinner=outer.newInner();冲突问题解决外部类和内部类的属性或者方法重名this.内容this是当前对象Outer.this.内容Outer.this外部类对象3.3静态成员内部类位置:类体中,和其他成员在同一级class文件:外部类内部类.class
语法: 【修饰符】 class 类名{}
成员:五大成员均可存在,包括静态资源
修饰符:四个访问修饰符均可存在,abstract final都可以单独修饰
使用:
a 内部类如何使用外部的类
静态资源可以直接使用,非静态的实例化对象使用
b 外部类如何使用内部类资源
如果静态资源,可以直接使用类名调用,非静态需要实例化对象使用
c 外部其他类如何使用内部类
不再依赖于外部类对象,直接实例化对象即可
Outer.Inner inner = new Outer.Inner();
冲突问题解决:
外部类的静态资源和内部类的普通资源如果有重复,有办法区分,静态资源可以直接通过类名调用
3.4 方法(局部)内部类
位置:某个方法内
class: Outer$1Inner.class 多了个1
语法: 【修饰符 abstract final】 class 类名{}
成员:五大成员均可存在,但不能有静态资源
无访问修饰符
使用:
内部类如何使用外部类资源?
直接使用
外部类如何使用内部类资源?
当前局部通过实例化对象形式访问
其他位置无法访问
外部其他类
访问不到
冲突问题解决
外部类和内部类属性重名,默认就近原则
this:当前对象
Outher.this 外部类对象
如果当前局部,存在局部变量,在内部类使用该变量的话!
默认会变为常量!
Spark-Java Day14
最新推荐文章于 2024-08-12 15:45:48 发布