Java 面向对象程序设计 接口

接口(interface)是用来实现类间多重继承功能的一种结构。它定义了若干个抽象方法和常量,形成一个属性集合,该属性集合通常对应了某一组功能。
凡是需要实现这种特定功能的类,都可以继承并使用它。一个类只能直接继承一个父类,但可以同时实现若干个接口。实现(或继承)接口实际上就获得了多个特殊父类的属性,即实现了多重继承。

1.接口与继承

接口定义的仅仅是实现某一特定功能的一组对外的协议和规范,而并没有真正地实现这个功能。这些功能的真正实现是在继承这个接口的各个类中完成的。

因为接口包含的是未实现的一些抽象的方法,它与抽象类有些相象。它们之间存在以下的区别:

  • 接口不能有任何实现了的方法,而抽象类可以。
  • 类可以继承(实现)许多接口,但只能继承一个父类。
  • 类有严格的层次结构,而接口没有层次结构,没有联系的类可以实现相同的接口。

2.接口的定义

接口是由常量和抽象方法组成的特殊类。接口的定义包括两个部分:接口声明和接口体。声明接口一般格式如下:

[public] interface 接口名 [extends 父接口名表 ] {
    域类型  域名=常量值;    //常量域声明
    返回值  方法名(参数表);    //抽象方法声明
}

接口声明中有两个部分是必需的:interface关键字和接口的名字。用public修饰的接口是公共接口,可以被所有的类和接口使用;没有public修饰符的接口则只能被同一个包中的其他类和接口利用。
接口也具有继承性,子接口可以继承父接口的所有属性和方法,同时一个子接口可以继承多个父接口。

3.接口的实现

定义接口是为了让某些类实现它。 一个类实现某个接口,要在类的声明中要包括一条implements语句,并提供在接口中定义的所有抽象方法的具体实现。
一个类可以实现多个接口,可以在implements后面列出要实现的多个接口,这些接口以逗号分隔。

interface calculate{
    int number = 100;
    void add(int s,int b);
    void mul(int a,int b);
}
public class TheInterface implements calculate{
    @java.lang.Override
    public void add(int s, int b) {
        System.out.println(s+b);
    }

    @java.lang.Override
    public void mul(int a, int b) {
        System.out.println(a*b);
    }
    public static void main(String[] args) {
        TheInterface myinterface = new TheInterface();
        myinterface.add(1,3);
        myinterface.mul(55,1);
        System.out.println(myinterface.number);
    }
}
//输出
//4
//55
//100

实现接口时应注意的问题:
(1)在类的声明部分,用implements关键字声明该类将要实现哪些接口。
(2)类在实现抽象方法时,必须用public修饰符。
(3)除抽象类以外,在类的定义部分必须为接口中所有的抽象方法定义方法体,且方法首部应该与接口中的定义完全一致。
(4)若实现某接口的类是abstract的抽象类,则它可以不实现该接口所有的方法。但是对于这个抽象类的任何一个非抽象子类,不允许存在未被实现的接口方法。即非抽象类中不能存在抽象方法。

接口的实例

interface Shape2 {
    public abstract double computeArea();
}
class Circle2 implements Shape2 {
    double radius;
    String type = "Circle";

    public Circle2(double _radius) {
        radius = _radius;
    }
    public double computeArea() {
        return Math.PI * radius * radius;
    }
    void Circle2(){
        System.out.println(computeArea());
    }
}
class Rectangle2 implements Shape2 {
    double width, height;
    String type = "Rectangle";
    public Rectangle2(double _width, double _height) {
        width = _width;
        height = _height;
    }
    public double computeArea() {
        return width * height;
    }
    void Rectangle2(){
        System.out.println(computeArea());
    }
}
public class ShapeTestWithInterface {
    public static void main(String args[]) {
        Circle2 c1 = new Circle2(2);
        Rectangle2 r1 = new Rectangle2(2,2);
        c1.Circle2();
        r1.Rectangle2();
    }
}

 

posted @ 2020-08-06 10:59  江之鸟  阅读(234)  评论(0编辑  收藏  举报