Java面向对象程序设计- 接口

阅读:192

1.接口的概念

接口interface,也是对行为的抽象。定义接口的语法格式如下:

[public] interface name {
 
}

接口的定义就是为了别的类来实现接口中的方法,通过如下语法格式来实现一个接口:

class ClassName implements Interface1,Interface2,[....]{
}

这样实现类就遵循了接口的规范。

下面我们定义一个例子:

我们先定义一个Person的接口,并抽象出两个方法:

public interface Person {

    void sleep();

    void eat();
}

然后,定义一个实现类Child,我们知道Child也是Person的范畴:

public class Child implements Person {
    @Override
    public void sleep() {
        System.out.println("child sleep...");
    }

    @Override
    public void eat() {
        System.out.println("child eat...");
    }

    public static void main(String[] args) {
        Child child = new Child();
        child.sleep();
        child.eat();
    }
}

运行结果为:child sleep...

child eat...

 

1.1 接口的特征

  • 接口中的变量被隐式地指定为public static final,且只能是public static final,也就是只能定义常量。
  • 接口中的方法默认是public abstract,且只能是public abstract的,也就是接口中的方法全部是抽象方法。
  • 接口不能被初始化,且没有构造器。
  • 接口可以通过extends继承接口,不能继承类。
  • 接口的实现类必须实现接口的方法,否则必须声明为抽象类。
  • Java是单继承的,也就是一个类只能有一个直接父类,但可以通过implements实现多个接口,当类在继承父类的同时有实现了多个接口时,extends关键字必须位于implements关键字之前。

2.接口和抽象类的区别

对于初级程序员,接口和抽象类的概念容易混淆。下面我们从两方面说明接口和抽象类的区别。

2.1 语法层面上的区别

  • 抽象类是类,可以有实现的方法,而接口中必须都是抽象方法,不能有实现。
  • 抽象类中的成员变量可以任何类型,但是接口中的成员变量必须是常量,也就是public static final修饰的。
  • 抽象类中可以有静态代码块和静态方法,而接口不可以。
  • Java是单继承,所以一个类只能继承一个抽象类,一个类可以实现多个接口。

 

2.2 用途和设计上的区别

在实际应用中,接口更多是作为一种规范使用。比如J2EE就有13中规范,比如JDBC、JNDI、EJB、RMI、Java IDL/CORBA、JSP、Java Servlet、XML、JMS、JTA、JTS、JavaMail、JAF。俗话说"一流企业做标准、二流企业做品牌、三流企业做产品"。

我们拿JDBC,是用于数据库驱动的规范,Sun公司规定了接口规范,各个数据库厂商,根据规范提供了具体实现。

抽象类,更多是对共性的行为进行抽象,然子类去继承。

比如我们实际开发中,更多的是顶层设计一个接口,然后再次设计一个抽象类来实现接口,如果接口的规范有共性,在抽象类中就可以具体去实现。然后最下层的类根据实际情况去实现接口规范中的方法。

 

读后有收获,请打赏。更多精彩内容,请关注微信公众号。有疑问请加QQ交流群:454792501

全部评论

发表评论
更多精彩内容,请关注微信公众号