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表达式 内部类稍后分析
接口的特性:
接口不能实例化
接口可以作为声明变量,引用那些实现该接口的对象
接口中的方法默认被设置为 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表达式 内部类稍后分析
相关文章推荐
- 2015 7 1 java核心技术 卷1 第6章 接口与内部类
- Java核心技术 卷I —— 第6章 接口与内部类
- [学习笔记] Java核心技术 卷一:基础知识 接口、lambda表达式与内部类(三)
- Java核心技术:卷1笔记[4] 接口和内部类
- Java核心技术(第8版)学习笔记_接口与内部类
- Java核心编程三:类的继承、反射、接口和内部类
- Core Java笔记—第6章 接口与内部类
- Java核心技术——接口和内部类
- JAVA基础【6.1】《Java核心技术1》接口与内部类-接口
- JAVA基础【6.2】《Java核心技术1》接口与内部类-对象克隆
- JAVA基础【6.3】《Java核心技术1》接口与内部类-回调
- JAVA基础【6.4】《Java核心技术1》接口与内部类-内部类
- JAVA基础【6.5】《Java核心技术1》接口与内部类-代理
- java核心技术笔记 接口与内部类
- java核心技术-接口和内部类(1)
- JAVA核心技术I之接口与内部类
- 【java核心技术笔记】接口与内部类
- Java核心技术读书笔记一接口和内部类
- [JAVA]《Java 核心技术》(二)接口与内部类
- java框架技术之hibernate核心类和接口