码迷,mamicode.com
首页 > 编程语言 > 详细

简单的java接口总结

时间:2018-06-17 17:51:32      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:TE   声明   oid   变量作用域   默认方法   数据   操作   source   外部   

  1. 接口
    1. 接口概念:接口是对类的一组需求描述而不是类
    2. 接口示例:Comparable 接口
    3. 接口的特点:
      • 接口的所有方法自动地属于Public,不需要明确说明
      • 接口中可以包含常量,但是不能包含实例域
    4. 实现接口的步骤:
      • 将类声明为实现给定接口
      • 对接口中的所有方法进行定义
      • 实现接口的关键字为implement
      • 实现接口时,必须把方法定义为public
      • java是一种强类型语言,调用方法时,编译器会检查这个方法是否存在
      • 比较是只能存在于父类与子类进行比较,而不能子类与父类进行比较!
    5. 接口的特性
      • 不能使用new实例化一个接口,但是可以声明接口的变量
      • 接口对象必须引用实现了接口的类的对象
      • instance可以检查是否实现了某一个接口
      • 接口也可以进行拓展,关键字为extends
      • 方法中可以直接使用接口中的定义的常量
      • 接口数不唯一,可以有如右的表示方法 interfance 1, interface 2
    6. 静态方法
      • 可以在接口中定义类似于getInstance的方法,从而提升api的简洁程度
      • 例如 static Calculator getInstance() { return new BasicCalculator(); }
    7. 默认方法:
      • 添加default进行标记,例如default void mouselistener(MouseEvent event){}
      • 加上default,则可以实现对需要进行使用的方法进行override,而不需要将所有的方法进行修改
    8. 解决默认方法冲突
      • 超类优先
      • 接口冲突:一个超接口提供一个默认方法,另一个接口提供同名且参数相同的方法(无论是否是default),必须覆盖这个方法从而解决接口冲突
        • 单独调用两个接口中的一个默认方法是无效的,例如Person.supergetName(),Java更加强调的是解决二义性
      • 超类>接口,前者继承的方法比后者更加优先,与此同时,类优先准则使得即使对接口中实现默认方法,也不会对之前正常运行的代码产生影响。
    9. Comparator接口
      • 实现自定义的comparator则需要在具体使用时建造实例,如下: Comparator<String> comp = new LengthComparator() if(comp.compare(word[i],word[j])>0)...
      • 在使用时,需要为arraysort传入两个参数,Arrays.sort(Friends,new LengthComparator())
      • 这是关于comparable和comparator区别的东西[]http://www.cnblogs.com/skywang12345/p/3324788.html)
    10. 对象克隆-->cloneable
      • 默认操作中,clone是浅拷贝,如果对象中包含子对象的引用,依旧会得到相同的对象引用
      • Cloneable接口
      • 即使浅克隆可以满足要求,也需要实现默认接口,将clone定义为public,再调用super.clone即可。
      • 如果是要建立深拷贝,那么就需要对每一个包含在内的子对象进行clone方法的调用。
  2. lambda表达式
    1. 定义:即为一个代码块,存在意义-->为了方便代码的传递
    2. 如果不能在一个表达式中完成表义的化,就需要{},且lambda表达式必须在每一个分支上都有返回值
    3. 函数式接口--??(函数字面量),lambda表达式只能传给函数式接口
    4. 方法引用:
      • :: 针对三种情况
        • object::instanceMethod
        • Class::staticMethod
        • Class::instanceMethod
        • super::instanceMethod(另当别论)
    5. 构造器引用
      • 方法名为new,其他和方法引用没差,即(int[]::new),(Person::new).
    6. 变量作用域
      • lambda表达式中有三个部分:一个代码块,一个参数,一个自由变量的值
      • lambda表达式只能引用值不会改变的变量,无论是在表达式内部还是在外部
      • lambda表达式中声明与局部变量同名的参数或者是局部变量是illegal的
    7. 处理lambda表达式
      • p240-p241,感觉很复杂,但是好好看
  3. 内部类
    1. 使用原因
      • 可以访问该类定义的数据
      • 可以对同一个包中的其他类隐藏
      • 匿名内部类很方便(在定义回调函数时)
    2. 使用内部类访问对象状态
      1. 内部类可以访问自身以及外部类的私有数据
      2. 内部类的特殊语法
        • Outerclass.this表示外部类对象的引用外部类的new和this
        • 在外部类中,使用this.new xxx()完成初始化,如果在外部,那么就使用xx.new yy()
      3. 局部内部类
        • 在特定的方法中定义,不能有修饰词,同时,可以对外部完全隐藏。
      4. 由外部方法访问变量
        • 局部类的方法只能是final修饰的局部变量
      5. 匿名内部类
        • 形式 new superType(construction parameters){ inner class method and data } superType可以是接口也可以是类
        • 不能有构造器
        • 对匿名字类使用getclass()!=other.getClass() GG
      6. 静态内部类
        • 不能引用外部类的数据,当然如果不需要引用外部类,就直接把内部类定义成static。
        • 静态方法中必须是静态内部类
        • 静态内部类可以有静态域以及方法
  4. 代理
    1. 何时使用
      • 无论什么时候使用,都一定会调用invoke方法
    2. 创建代理对象
      • 类加载器,Class对象数组,调用处理器
      • 使用的方法是newProxyInstance().
  5. 接口与抽象类
    1. 后者中可以实现具体方法
    2. 后者可以实现接口,而接口本身不能实现接口
    3. 前者可以多实现,而后者只能单继承

简单的java接口总结

标签:TE   声明   oid   变量作用域   默认方法   数据   操作   source   外部   

原文地址:https://www.cnblogs.com/jimmyLearning/p/9193194.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!