《Java核心技术(卷一)》读书笔记——接口

Interface

1.      接口的概念?

接口不是类,而是对类的一组需求描述。

如果类遵从某个特定接口,那么就要履行这项服务

2.      接口的组成?

所有方法自动public

不允许含有实例域

不能在接口中实现方法

可以定义常量

3.      反对称规则

n  Java语言中有这样一个接口:

n  语言标准规定:

对于任意的x和y,必须保证:sgn(x.compareTo(y) ) = -sgn( y.compareTo(x) );

(如果前者抛出异常,后者也应抛出异常)

n  在继承中,便会有如下问题出现:

Manager类拓展了Employee类,Employee类实现了Comparable<Employee>

如果Manager类覆盖了compareTo方法,就要特别注意类型转换的问题

n  上述代码违反了反对称规则

employee.compareTo(manager);//没毛病

manager.compareTo(employee);//抛出ClassCastException异常

解决方案

 

4.      接口的特性?

接口不是类,不能被实例化( new );

可以声明一个接口的变量,必须引用实现了该接口的类对象;

可以使用instanceof检查一个对象是否实现了某个特定的接口;

接口可以被拓展;

借口不能包含实例域和静态方法,但可以包含常量( 自动public static final );

5.      接口和抽象类的比较

组成:·          

 

实例域

具体方法

静态方法

静态常量

抽象类

可以有

接口

不可以

可以有

 

拓展性:一个类只能继承一个抽象类,却能实现多个接口        

功能:

抽象类提供通用方法和实例域,通常作为顶层基类,定义一个家族类的默认行为;

接口提供特定服务供其他类实现。同时,接口提供了一种抽象,能更好的定义类型,有助于后面实现多态机制。

6.      对象克隆

1.      为什么要克隆?

2.      浅克隆(默认)

n  不克隆对象中的内部对象

n  如果在对象中包含了子对象的引用,浅拷贝的结果会使两个域引用同一个子对象,因此原始对象和克隆对象共享这部分信息

n  如果子对象是不可变对象,例如String对象,不会产生任何问题;

3.      深克隆

子对象常常可变,这就需要我们重新定义clone方法,以实现对子对象的拷贝

4.       我们在克隆前需要想清楚以下问题:

a)        默认的clone方法能否满足要求

b)        默认的clone方法是否能够通过调用可变子对象的clone方法得到修补

c)        是否不应该使用clone方法

5.      Objectclone方法

受保护方法(protected):

protected native Object clone() throws CloneNotSupportedException;

6.      Cloneable接口

public interface Cloneable {       }

明确:

1.      Cloneable接口是一个tagginginterface,与接口的使用没有任何关系。毕竟clone方法是从Object类继承过来的。接口只是作为一个tagger,表明类设计者知道要进行克隆处理

2.      tagging interface:

n  没有方法;

n  可以使用instanceof进行类型检查:某个对象是否实现了该接口

7.       浅拷贝的实现

8.       深拷贝的实现

说明:只要在clone方法中含有没有实现Cloneable接口的对象,当然,这里的Employee和Date类都已经实现了Cloneable,因此不会抛出异常。但是编译器并不知道,因此,需要声明异常。

9.      为什么我们要慎用克隆

7.      接口与回调

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值