接口

来源:互联网 发布:什么网络兼职靠谱 编辑:程序博客网 时间:2024/06/12 21:04
  • 接口语法

    • [修饰符] interface 接口名 extends 父接口1, 父接口2, …{
      //常量定义
      //方法定义
      }
    • class 类名 extends 父类名 implements 接口1, 接口2, …{
      //类成员
      }
  • 接口说明

    • 接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见;如果省略修饰符,则该接口只在当前包可见。
    • 接口可以定义常量,不能定义变量。接口中的属性都会自动用public static final修饰,即接口中的属性都是全局静态常量。接口中的常量必须在定义时指定初始值。
    • 接口中的所有方法都是抽象方法。接口中方法都会自动用public abstract修饰,即接口中只有全局抽象方法。
    • 和抽象类一样,接口也不能实例化,接口中不能有构造方法。
    • 接口之间可以通过extends实现继承关系,一个接口可以继承多个接口,但接口不能继承类。
    • 接口的实现类必须实现接口的全部方法,否则必须定义为抽象类。
    • 一个类只能有一个直接父类,但可以通过implements实现多个接口。当类在继承父类的同时又实现了多个接口,extends关键字必须位于implements关键字之前。
  • 接口表示一种能力

    • 一个类实现了某个接口,就表示这个类具备了某种能力。
/** * 父类:门,抽象类 */public abstract class Door {    public abstract void open();    //开门    public abstract void close();   //关门}/** * 接口:锁,实现开锁上锁 */public interface Lock {    void lockUp();      //上锁    void openLock();    //开锁}/** * 拍照存档的接口 */public interface DoorBell {    void takePictures();    //拍照存档功能}/** * 子类:防盗门类,继承父类,门类,并且实现锁和拍照存档的接口 */public class TheftproofDoor extends Door implements Lock,DoorBell {    /**     * 重写父类Door类的开门抽象方法     */    @Override    public void open() {        System.out.println("用力推,门打开了。");    }    /**     * 重写父类Door类的关门抽象方法     */    @Override    public void close() {        System.out.println("轻轻拉门,门关上了。");    }    /**     * 实现接口锁,上锁的方法     */    @Override    public void lockUp() {        System.out.println("插进钥匙,向左旋转钥匙三圈,锁上了,拔出钥匙。");    }    /**     * 实现接口锁,开锁的方法     */    @Override    public void openLock() {        System.out.println("插进钥匙,向右旋转钥匙三圈,锁打开了,拔出钥匙。");    }    /**     * 实现接口拍照存档的方法     */    @Override    public void takePictures() {        System.out.println("铃……咔嚓……照片已存储");    }}
  • 接口表示一种约定
/** * 接口:CPU */public interface CPU {    /**     * 获取CPU品牌     * @return CPU品牌     */    String getCPUBrand();    /**     * 获取CPU主频     * @return CPU主频     */    double getCPUFrequency();}/** * 实现CPU接口并规定品牌和主频 */public class CPU1 implements CPU {    @Override    public String getCPUBrand() {        return "Intel";    }    @Override    public double getCPUFrequency() {        return 3.8;    }}/** * 定义Computer类 */public class Computer {    /**     * 类型对象     */    CPU cpu;    /**     * 有参构造     * @param cpu CPU的对象     */    public Computer(CPU cpu){        this.cpu=cpu;    }    /**     * 输出信息     */    public void showInfo(){        System.out.println("计算机的信息如下:");        System.out.println("CPU的品牌是:"+cpu.getCPUBrand()+",主频是:"+cpu.getCPUFrequency()+"GHz");    }}/** * 测试类 */public class TestComputer {    public static void main(String[] args) {        CPU cpu=new CPU1();        Computer computer=new Computer(cpu);        computer.showInfo();    }}