您的位置:首页 > 编程语言 > Java开发

java核心卷1 第6章接口lambda 内部类 心得

2017-10-13 09:14 316 查看
接口:是对类的一组需求的描述,这些类要遵守接口描述的统一格式进行定义。类实现了一组给定的接口就要履行相应的义务。

接口的特性:

接口不能实例化

接口可以作为声明变量,引用那些实现该接口的对象

接口中的方法默认被设置为 public (不必明着声明)

接口中的数据域 将自动被设置为 静态常量

接口与抽象类的区别:

1.接口与类的普通区别 (加上抽象)说的不详细,自己想把,第二个才是关键  2.抽象类是人们希望将让一些类作为演化其他类的基类,而不想得到这些类的实例。而接口则是对类的一组需求的描述。

接口中的方法:

静态方法----

在接口中允许加入静态方法,没有任何理由认为这是不合理的。但是违背接口对抽象规范的初衷,目前的解决办法是将这些静态方法放入伴随类中 例如成对出现的 使用工具方法类和接口  Arrays和Array Collections 和Collecton Paths 和Path

默认方法--

默认方法的主要作用就是接口演化  interface envolution

举个例子;  类A 实现接口B,然后就要 定义 B中的方法 。那么此时,我想要在B中扩展方法 f ,那么在没有默认方法时就需要在类A中定义f 。否则即使不重新编译这个类,只是使用原先的一个包含这类的Jar包,仍能正常加载,不过不包含该新方法,不过在实例中调用出现abstractMethodError。如果将该方法设置为默认方法 ,那么类A能重新编译,实例调用f则调用 接口中的方法。不过在类A中仍能覆盖默认方法

接口实例:

回调 callback是一种常见的程序设计模式 :当某个事件发生时采取相应的动作

Comparable :对象数组可以进行按字典顺序的排序 Arrays.sort (Comparable<T>)接口中的方法int  compareTo(Object)

为什么不能直接在类中定义该方法 而要实现接口呢?

Java是强类型语言 。在调用方法时,Java编译器会查看该实例是否有该方法。如何查看呢?,sort方法中 有if(a[i].compareTo(a[j])>0)

如果a[i]是实现Comparable接口的对象 ,那么久有这个方法

Comparator: 比较器   :自己定义比较

Cloneable: 标记接口 该接口出现与正常使用没有任何关系,clone方法是在Object中定义 该接口只是作为一个标记,使类设计者了解接口的过程

详:

clone()

在Object中定义的clone  是prodected的,因此不能直接使用。 只有相应的类才能得到相应对象的拷贝。因为object对对象进行拷贝时,对这个对象一无所知,就要对这个对象逐个域的进行拷贝

默认的clone是浅拷贝 。对象中的域包含对子对象的引用,那么拷贝域就会得到子对象的相同引用。于是原对象和拷贝的对象扔存在一些共享信息,称为浅拷贝

如果子对象是不可变的,那么浅拷贝是安全的。通常的子对象都是可变的,则必须重新定义clone建立深拷贝

所有数组类型都有一个public 的clone方法 

lambda表达式  内部类稍后分析 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: