接口

接口

目前正在按照《Java核心思想:卷一》来复习一些java基础方面的知识。以下内容大部分来自看书的总结。


接口用来描述类应该做什么,而不指定它们具体应该怎么做。在java程序设计语言中,接口不是类,而是对希望复合这个接口的类的一组需求。

例如:Arrays类中的sort方法可以对对象数组进行排序。但是要满足这个条件:对象所属的类必须实现comparable接口。具体需要实现它里面的comparaTo方法。

public interface Comparable {
	int comparaTo(Object other);
}
  • 接口中的所有方法自动都是public。在接口中声明方法时,不必提供关键字public.

为什么不在一个实现类中直接提供comparaTo方法,而是必须实现一个Comparable接口呢?

主要原因在于java程序设计语言是一个强类型语言,在调用时,编译器会检查这个方法确实存在。在sort方法里可能会有这样的语句:

if (a[i].comparaTo(a[j]) > 0)
{
	//rearrange a[i] and a[j]
	...
}

编译器会确认a[i]一定有一个comparaTo方法。如果a是一个comparable对象的数组,就可以确保拥有comparaTo方法,在实现接口时就必须提供该方法的定义。

  • 接口不是类,不能用new运算符实例化一个接口:

    x = new Comparable(...); //error Comparable为一个接口 
    
  • 可以声明接口的变量:

    Comparable x;
    

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

  • 可以拓展接口:

    public interface Powered extends Moveable 
    {
    	double milesPerGallon();
    }
    
  • 接口中的字段默认是 public static final。

  • 每个类只能有一个超类,但是可以实现多个接口。

    class Employee implements Cloneable,Comparable
    

接口与抽象类:

为什么要引入接口的概念?不直接吧上面的Comparable声明为一个抽象类?

使用抽象类表示通用属性存在一个严重的问题。每个类只能拓展一个类。每个类可以实现多个接口。

接口可以提供多重继承的大多好处。同时还可以避免多重继承的复杂性和低效性。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值