java接口interface笔记

一、接口概念

在java程序设计语言中,接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。

二、接口的一些性质

1、接口不能包含实例域(即变量)和静态方法(java SE 8后允许在接口中添加静态方法)
2、接口中所有方法都会自动设为public 
3、接口中的域(接口中可以有常量)将自动设置为public static final
4、接口变量必须引用实现了接口的类的对象
5、实现接口的关键字implements
6、类实现了一个接口就要对接口中的所有方法进行定义
7、一个类可以同时实现多个接口,用逗号分隔。
8、接口与接口直接可以继承,并且可以多继承。

三、instanceof关键字的作用

1、检测一个对象是否是某个类的实例
2、检查一个对象是否实现了某个特定的接口

四、抽象类与接口

1、为什么有抽象类还还要引入接口的概念?

因为一个类只能继承一个类,但可以实现多个接口。如果我们的抽象方法放在不同的抽象类中,在定义类时就无法做到将其全部实现,如果放在接口中就可以全部实现。

五、默认方法

在jdk1.8后可以将接口中的方法声明为默认方法,这些方法可以什么都不做(也可以有方法体,具体实现)。必须用default修饰符标记这样的方法。

1、默认方法的一个重要用法“接口演化”

应用背景:假设在很久以前你定义了一个Test类实现了一个接口,在jdk1.8后又向接口中增加了一个add方法。如果add方法不是一个默认方法,那么Test类将不能编译,因为它没有实现新的方法(如果你将接口中的add方法定义成非默认方法,不能保证“源码兼容”)。不过,假设不重新编译这个类,而使用而使用原先的一个包含这个类的jar文件,当你在程序中用Test实例调用add方法时,就会出现AbstractMethodEorror错误。

解决办法:在接口中将方法实现成默认方法就可以解决这两个问题。

这样Test类可以正常编译,而且在没有重新编译而直接加载这个类时,用Test实例调用add方法,将调用接口中的默认的add方法。

2、默认方法冲突

默认方法冲突的原因:在一个类实现的一个接口中将一个方法定义为默认方法,然后在该类的超类或另一个接口中定义了同样的方法就可能产生默认方法冲突。

造成默认方法的两种情况和对应解决方法:

1、一个接口的默认方法和一个超类中具体方法冲突的情况(即两个方法相同):

解决办法:这种情况不用管,有超类优先原则。

2、一个接口提供了一个默认方法,另一个接口提供了一个同名而且参数类型相同的方法(不论是否是默认方法)而产生冲突的情况:

解决办法:必须覆盖相同的方法来解决冲突。可以在覆盖的方法中通过 (接口名.super.方法名)选择调用哪个接口中的方法。

六、两个常用的接口

1、Comparable接口

Arrays类中的sort方法可以对对象数组进行排序,但要求对象所属的类必须实现Comparable<T>接口,并定义接口中的campareTo方法。如果希望自己设计的类具有比较的功能,就需要实现Comparable接口。

2、Cloneable接口

Object类中的clone方法可以创建类对象的一个拷贝。如果希望自己设计的类具有克隆的功能,就需要实现Cloneable接口。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值