Spark-Java Day14

  1. 接口(支持多态)
    JDK1.8之前

    1. 所有的属性都是公有静态常量
    2. 所有的方法都是公有的抽象方法
    3. 接口无法实例化对象,也没有构造器
    4. 接口只能作为父级使用
    5. 类可以实现多个接口,但类需要实现接口中所有抽象方法
    6. 接口可以继承多个接口
      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文件:外部类 .classclass访使a使访b使c使1Outerouter=newOuter();(2)Outer.Innerinner=outer.newInner();this.thisOuter.this.Outer.this3.3class内部类.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 外部类对象
    如果当前局部,存在局部变量,在内部类使用该变量的话!
    默认会变为常量!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值