接口与抽象类

接口

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

x = new Comparable(...) ; // Comparable是一个接口 ,这样是错误的

然而,尽管不能构造接口的对象,却能声明接口的变量:

Comparable x;//OK

接口变量必须引用实现了接口的类对象:

x = new Employee(...); //OK   public class Employee implements Comparable

与可以建立类的继承关系一样,接口也可以被扩展.这里允许存在多条从具有较高通用性的接口到较高专用性的接口的链.例如:

public interface Moveable{
      void move(double x,double y);
}

然后,可以以它为基础扩展一个叫powered的接口:

public interface Powered extends Moveable{
      double mile();
}

虽然在接口中不能包含实例域或静态方法,但却可以包含常量.例如:

public interface Powered extends Moveable{
      double mile();
      double SPEED = 95;  // a public static final constant
}

与接口的方法都自动被设置为public一样,接口中的域将被自动设置为public static final

一个类只能继承一个父类(java是单继承语言),但是一个类可以实现多个接口

class Employee implements Cloneable,Comparable

接口和抽象类

对抽象类概念不懂的,可以查看我前面写的文章,这里就不重复介绍了

了解完抽象类和接口外,可能你会有一个疑问,为什么java程序设计语言要不辞辛苦地引入接口的概念?为什么不直接把Comparable直接设计后才能如下所示的抽象类

abstract class Comparable{
      public abstract int compareTo(Object other);
}

然后,Employee类再直接扩展这个抽象类,并提供compareTo方法的实现:

class Employee extends Comparable{
      public int compareTo(Object other){...}
}

非常遗憾,使用抽象类表示通用属性存在这样一个问题:每个类只能扩展一个类.假设Employee类已经扩展了一个类,例如:Person,它就不能再像下面一样扩展第二个类

class Employee extends Person, Comparable // Error

但是每个类可以像下面一样扩展多个接口

cl ass Employee extends Person implements Comparable // OK
posted @ 2020-09-23 19:46  刘指导  阅读(132)  评论(0编辑  收藏  举报