Java面向对象系列(14)- 接口的定义与实现

接口

 

  • 普通类:只有具体实现
  • 抽象类:具体实现和规范(抽象方法)都有
  • 接口:只有规范!约束和实现分离

 

  • 接口就是规范,定义的是一组规则,体现了现实世界中“如果你是…则必须能…”的思想。如果你是天使,则必须能飞。如果你是汽车,则必须能跑。如果你是好人,则必须干掉坏人。
  • 接口的本质是契约,就像我们人间的法律一样。制定好后大家都遵守。
  • OO的精髓,是对对象的抽象,最能体现这一点的就是接口。为什么我们讨论设计模式都只针对具备了抽象能力的语言(比如c++、java、c#等),就是因为设计模式所研究的,实际上就是如何合理的去抽象

 

  • 声明类的关键字是class,声明接口的关键字是interface

接口一

package oop.demo09;

//interface 接口
public interface UserService {

    //常量:接口中定义的参数都是常量:public static final
    public static final int age = 99;
    //只保留常量类型,常量名和值即可
    double score = 99.5;

    //接口中所有的方法定义都是抽象的即 public abstract
    public abstract void go();
    //public abstract直接去掉,方法保留返回类型和方法名,以及参数(如果有的话)
    void run(String name);
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}

接口二

package oop.demo09;

public interface TimeService {
    void time();
}

实现接口的类

package oop.demo09;

//实现接口的类命名,一般命名为接口+Imp,即UserServiceImp
//通过implments关键字来继承(实现)接口的类
//实现接口的类,需要重写接口中的方法

//利用接口实现多继承
public class UserServiceImp implements UserService,TimeService {
    @Override
    public void go() {

    }

    @Override
    public void run(String name) {

    }

    @Override
    public void add(String name) {

    }

    @Override
    public void delete(String name) {

    }

    @Override
    public void update(String name) {

    }

    @Override
    public void query(String name) {

    }

    @Override
    public void time() {

    }
}

总结

  • 接口就是一个约束,定义了一些方法,让不同的人去实现它
  • 定义接口类使用关键字interface
    • 接口类不能被实例化,接口中没有构造方法,只有方法名,构造方法有继承(实现)接口的类去实现
    • 接口类中方法的定义都是抽象的,即public abstratc。只需要保留方法的返回类型+方法名+(参数)
    • 接口类中定义的参数都是常量,即public static final。只需要保留常量的类型+常量名+常量值
  • 继承(实现)接口类使用关键字implements,继承多个接口用逗号分隔
    • 继承(实现)接口类,必须重写接口中的方法
    • implements可以实现多个接口