Java基础读书笔记(六)——接口

接口

Java支持单重继承机制,不支持多重继承。单继承机制使得Java结构简单,层次清楚,易于管理,但在实际应用中也需要使用多重继承功能。为了实现像C++中的多重继承,Java中引入了接口概念。

- 接口定义

接口是由常量和抽象方法组成的特殊类,刻画了类与类之间合作的标准。接口定义由interface引导,分为接口的声明和接口体。在接口体中只进行方法声明,不能进行方法的实现。

 [public] interface  接口名 [extend 父接口名列表]{
     [public][static]][final]域类型 域名 = 常量值; //常量域声明
     [public][abstract][native]返回值 方法名(参数列表)[throw 异常列表]; //抽象方法声明
 }
注意:

①interface是声明接口的关键字,可以把接口看成一个特殊类。

②用户public修饰的是公共接口,可被所有的类和接口使用,且该接口中的方法和变量也全部为public。如果是默认的修饰符的接口,则只能被同一个包中的其他类和接口使用。

③接口具有继承性,一个接口可以继承多个父接口,父接口间用逗号分隔。

④系统默认接口中所有属性的修饰都是public static final.

⑤系统默认接口中所有方法的修饰都是public abstract.

⑥在接口中对抽象方法声明时,只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即这些借口仅是规定了一组信息的交换、传输和处理的“接口”。

public interface Stu_info {
    int year = 2018;//定义在接口中的变量全部隐含为final和static,因此成员变量year必须设置初值。
    int age();
    void out(); //接口中只有方法声明,没有方法实现
}
- 实现接口

接口是抽象类的一种,不能直接用于创建对象。接口的作用在于规定一些功能的框架。一旦一个接口被定义,一个或多个类就可以实现该接口。用关键字implement声明一个类将实现一个接口。

[<修饰符>]class<类名>[extends<超类名>][implements<接口名1>,<接口名2>,...]    //<修饰符>可以是public,也可省略。
注意:

①一个类可以实现多个接口,用逗号分隔接口列表。

②如果实现某接口的类**不是**abstract的抽象类,则在类的定义部分为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表。

③如果实现某接口的类 abstract的抽象类,则它可以不实现该接口所有的方法。但该类的任一非抽象子类,它的父类所实现的接口中所有抽象方法都必须存在实在的方法体。这些方法体可以来自抽象父类,也可来自子类自身,但不允许存在未被实现的接口方法。这体现了非抽象类中不能存在抽象方法的原则。

④接口的抽象方法的访问限制符都已指定为public,一个类在实现该接口时,必须实现接口中所有方法,并且方法必须声明为public。

一个类实现一个接口:
public class Student implements Stu_info {
      String name;
      String Sex;
      int birth_year;

    public Student(String name, String sex, int birth_year) {
        this.name = name;
        Sex = sex;
        this.birth_year = birth_year;
    }
    public int age() {
        return year-birth_year;
    }
    public void out() {
        System.out.println(this.name +" " + this.Sex +" " +this.age()+"岁");
    }
    public static void main(String[] args) {
        Student s1 = new Student("Jackson", "男", 2000);
        s1.out();
    }
}

运行结果:
这里写图片描述

多个类实现同一接口:
interface fee {
     public void charge();

}

public class Apple implements fee {
    public void charge() {
        System.out.println(" apple: 10元1斤");
    }
}

public class Banana implements fee {
    public void charge() {
        System.out.println("banana: 15元2斤");
    }
}

public class Fruit {
    public static void main(String[] args) {
        Apple red = new Apple();
        Banana yellow =new Banana();
        red.charge();
        yellow.charge();
    }
}

运行结果:
这里写图片描述

一个类实现多个接口:
interface Shape {
    double PAI = 3.14;
    double getArea();
}

interface showShape {
     void showInfor();
}

public class Circle implements Shape, showShape {
    int r;
    public Circle(int r) {
        this.r = r;
    }
    public double getArea() {
        return r*r*PAI;
    }
    public void showInfor() { 
        System.out.println("r="+ r + "\t the area: " + getArea());
    }
    public static void main(String[] args) {
        Circle c=new Circle(10);
        c.showInfor();
    }

运行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/YOLO97/article/details/81490078