java核心卷Ⅰ第十版笔记6

安全工
• 阅读 760
  1. 接口可以定义常量,然而接口绝不能含有实例域,在 JavaSE 8 之前,也不能在接口中实现方法。现在已经可以在接口中提供简单方法了,当然,这些方法不能引用实例域,接口没有实例。
  2. 接口可以提供多重继承的大多数好处, 同时还能避免多重继承的复杂性和低效性 。
  3. 在 Java SE 8 中,允许在接口中增加静态方法。理论上讲,没有任何理由认为这是不合法的。只是这有违于将接口作为抽象规范的初衷。目前为止,通常的做法都是将静态方法放在伴随类中。在标准库中,你会看到成对出现的接口和实用工具类,如Collection/Collections或Path/Paths。
  4. 可以为接口方法提供一个默认实现。 必须用default 修饰符标记这样一个方法。
  5. 如果先在一个接口中将一个方法定义为默认方法,然后又在超类或另一个接口中定义了同样的方法,会发生什么情况?Java的相应规则如下:1) 超类优先:如果超类提供了一个具体方法,同名而且有相同参数类型的默认方法会被忽略。2) 接口冲突;如果一个超接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型(不论是否是默认参数)相同的方法 ,必须覆盖这个方法来解决冲突。如果至少有一个接口提供了一个实现 ,编译器就会报告错误 ,而程序员就必须解决这个二义性。当然,如果两个接口都没有为共享方法提供默认实现,那么就与Java SE 8 之前的情况一样, 这里不存在冲突 。实现类可以有两个选择 : 实现这个方法, 或者干脆不实现 。如果是后一种情况, 这个类本身就是抽象的 。另一种情况,一个类扩展了一个超类 ,同时实现了一个接口, 并从超类和接口继承了相同的方法。在这种情况下,只会考虑超类方法 ,接口的所有默认方法都会被忽略。这正是类优先规则。类优先规则可以确保与 JavaSE 7 的兼容性。如果为一个接口增加默认方法 ,这对于有这个默认方法之前能正常工作的代码不会有任何影响。警告:千万不要让一个默认方法重新定义Object 类中的某个方法。例如,不能为toString或equals定义默认方法,尽管对于 List 之类的接口这可能很有吸引力,由于类优先规则,这样的方法绝对无法超越 Object.toString 或Objects.equals。
  6. 如果希望 copy 的是一个新对象, 它的初始状态与 原对象相同 , 但是之后它们各自会有自己不同的状态 , 这种情况下就可以使用 clone 方法。默认的克隆操作是 “ 浅拷贝 ”, 并没有克隆对象中引用的其他对象 。浅拷贝会有什么影响吗 ? 这要看具体情况。 如果原对象和浅克隆对象共享的子对象是不可变的 , 那么这种共享就是安全的。 如果子对象属于一个不可变的类 ,如 String , 就 是 这 种情况。 或者在对象的生命期中 ,子对象一直包含不变的常量 , 没有更改器方法会改变它 , 也没有方法会生成它的引用, 这种情况下同样是安全的。
  7. 内部类是定义在另一个类中的类。 为什么需要使用内部类呢 ?其主要原因有以下三点 :内部类方法可以访问该类定义所在的作用域中的数据 ,包括私有的数据。内部类可以对同一个包中的其他类隐藏起来。当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷。
点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java中多态的实现机制
多态的概念:  简单来说就是事物在运行过程中存在的不同状态,即父类或接口定义的引用变量指向子类或具体实现类的实例对象。程序调用方法在运行期才进行动态绑定,而不是引用变量的类型中定义的方法。多态存在的前提:1、存在继承关系,子类继承父类;2、子类重写父类的方法;3、父类引用指向子类对象。具体实例:1、定义一个父类:Animal
Wesley13 Wesley13
3年前
java 07 接口
1.interface    接口2.接口中的成员修饰符固定  publicstaticfianl  //成员变量  只通过类访问   publicabstract    //成员函数   3.接口里所有的方法都是抽象的,抽象类中,可以没有抽象方法。  类与类继承,类与接口是实现的关系。降低耦合(高
Wesley13 Wesley13
3年前
java8中接口中的default方法
在java8以后,接口中可以添加使用default或者static修饰的方法,在这里我们只讨论default方法,default修饰方法只能在接口中使用,在接口种被default标记的方法为普通方法,可以直接写方法体。实现类会继承接口中的default方法如果接口A中有default方法:publicinterfaceA{publi
Stella981 Stella981
3年前
MyBatis 面试题(附答案解析)
目录MyBatis的实现逻辑MyBatis的缓存实现逻辑{}和${}的区别是什么?MyBatis中自定义标签的执行原理简述Mapper接口的工作原理在Spring中Mapper接口是如何被注入的?在Mapper接口中是否可以有重载方法?当实体类中的属性名和表中的字
Easter79 Easter79
3年前
TypeScript 中的类和接口
在面向对象(OOP)编程中,经常会使用到class(类)和interface(接口)。在TypeScript(以下简称TS)中也引入了类和接口的概念,使得TS强大的类型检测机制更加完善。就像我们所知道的,一个类是一堆抽象概念的集合,我们可以从类的构造方法中创建出享有共同属性和方法的对象。一个接口所描述的是一个对象相关的属性和方法,但并不提供具体创建此对象实例
Wesley13 Wesley13
3年前
Java8之Stream
在使用Stream之前先介绍几个概念:1、函数式接口2、常用的函数式接口3、Lambda4、方法引用 1、函数式接口  1.只定义了一个抽象方法的接口。  2.JDK8接口中的静态方法和默认方法,都不算是抽象方法。  3.接口默认继承java.lang.Object,所以如果接口显示声明覆盖了Object中方法,
Wesley13 Wesley13
3年前
Java多线程 简记
1、实现多线程方法继承Thread类或者实现Runnable接口2、Thread 和Runnable区别实现Runnable接口比继承Thread类所具有的优势:1):适合多个相同的程序代码的线程去处理同一个资源2):可以避免java中的单继承的限制3):增加程序的健壮性,代码可以被多个
Wesley13 Wesley13
3年前
Java 接口基础详解
目录Java接口示例实现一个接口接口实例实现多个接口方法签名重叠接口变量接口方法接口默认方法接口与继承继承与默认方法接口与多态性在Java中,接口是一个抽象类型,有点类似于类,但Java接口只能包含方法签名与属性,
Wesley13 Wesley13
3年前
Java oop第05章_多态、接口
一、为什么需要接口?  Java中当一个类继承父类时,最多也只能继承一个父类,扩展性会受到一定的限制,为了弥补这一缺陷,Java又提供了一种新的引用数据类型分类,叫接口。一个类只能继承一个父类,但可以实现多个接口。二、接口的定义和使用:  1.定义接口:使用interface关键
Wesley13 Wesley13
3年前
Java 8 接口里的默认方法特性研究
这篇文章我们将要探讨Java 8中接口里的默认方法特性。Java8指出“默认方法使得新功能被添加到库中的接口里面,同时又能保证与这些接口老版本代码的二进制兼容性。这些年Java进化升级了很多,在Java库中引入的接口需要添加新的功能。在没有默认方法特性时,当你往接口中添加新方法时,接口内部所有实现的类都要历经一些修改。这将导致上千行的代码修改工作量。为了
小万哥 小万哥
1年前
Java 枚举(Enums)解析:提高代码可读性与易维护性
接口在Java中,实现抽象的另一种方式是使用接口。接口定义接口是一个完全抽象的类,用于将具有空方法体的相关方法分组:java//接口interfaceAnimalpublicvoidanimalSound();//接口方法(没有具体实现体)publicvo
安全工
安全工
Lv1
回忆总是会打我一个巴掌指着旧的伤疤不准我遗忘
文章
5
粉丝
0
获赞
0