接口是抽象类的一种。
Java不支持多重继承,可通过接口实现。

8.2.1 接口定义

  1. [public] interface 接口名 [extends 父接口名列表]
  2. {
  3. [public] [static] [final] 域类型 域名 = 常量值 ;
  4. [public] [abstract] 返回值 方法名(参数列表) [throw 异常列表];//别忘了默认也是这些修饰!
  5. }
  6. //自定义接口举例
  7. interface Copyable {
  8. Object copy ();
  9. }

别忘了默认也是这些修饰!

  • 声明接口可给出访问控制符;
  • 一个接口还可以继承多个父接口,父接口间用逗号分隔。
  • 系统默认接口中所有属性的修饰都是public static final;
  • 系统默认接口中所有方法的修饰都是public abstract。

    8.2.2 接口的实现

    实现接口的类要将接口带来的抽象方法覆盖!

  • 一个类可以实现多个接口。在类的声明部分用implements关键字声明该类将要实现的接口,接口间用逗号分隔;

  • 如果实现某接口的类不是抽象类,则该类必须实现指定接口的所有抽象方法
  • 接口的抽象方法的访问限制符默认为 public,在实现时要在方法头中显式地加上public修饰。 ```java interface Copyable { //[public] Object copy ();默认为public Object copy (); } class Book implements Copyable { String book_name; // 书名 String book_id; // 书号 public Book(String name ,String id) {

    1. book_name = name;
    2. book_id = id;

    } public Object copy () { //public 一定要! //这里是否可为Book类型?返回值为子类Book时,可改为Book

    1. return new Book(book_name , book_id);

    } //实现接口的类要将接口带来的抽象方法覆盖! …

    1. public String toString(){
    2. return super.toString()+" ,书名:"+book_name+",书号="+book_id;

    } public static void main (String [] args) {

    1. Book x = new Book("Java程序设计","ISBN8359012");
    2. System.out.println(x);
    3. System.out.println(x.copy());
    4. Book y = (Book)x.copy();
    5. System.out.println(y);

    } }

运行结果: 书名:Java程序设计,书号=ISBN8359012 书名:Java程序设计,书号=ISBN8359012 书名:Java程序设计,书号=ISBN8359012

  1. 定义StartStop接口,其中含start()和 stop()方法。
  2. - “课堂”实现该接口,”汽车”实现该接口。
  3. - 测试用接口引用具体对象,调用方法。
  4. ```java
  5. interface StartStop{
  6. public void start();
  7. public void stop();
  8. }
  9. class classroom implements StartStop{
  10. public void start(){
  11. System.out.println("上课了");
  12. }
  13. public void stop(){
  14. System.out.println("下课了");
  15. }
  16. }
  17. class car implements StartStop{
  18. public void start(){
  19. System.out.println("车启动了");
  20. }
  21. public void stop(){
  22. System.out.println("车停了");
  23. }
  24. }
  25. public class Test {
  26. public static void main(String a[ ])
  27. {
  28. StartStop []s=new StartStop[2];
  29. s[0]=new classroom();
  30. s[1]=new car();
  31. for(StartStop t:s)
  32. {
  33. t.start();
  34. t.stop();
  35. }
  36. }
  37. }

二义性问题

  1. interface Frob { //接口定义
  2. float v = 2.0f; //默认final
  3. }
  4. class Parent { //父类定义
  5. int v = 3; //默认不同于C++,(同一类中可以访问,同一包中可以访问)
  6. }
  7. class Test extends Parent implements Frob {
  8. public static void main(String[] args) {
  9. new Test().printV();
  10. }
  11. void printV() {
  12. System.out.println((super.v + Frob.v)/2); //super.v父类 Frob.v 接口
  13. }
  14. }