接口

1、什么是接口

接口技术用于描述类具有什么功能,但不给出具体实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则、标准。

定义接口使用关键字interface:interface 接口名{}

类和接口是实现关系,用implements表示:class 类名 implements 接口名

package com.wang.duixiang;

public class InterfaceDemo01 {
    public static void main(String[] args) {
       // Smoking smoking=new Smoking() 接口不能实例化,它比抽象类更抽象
        Smoking smoking=new Teacher();
        smoking.smoke();
    }
}
//接口Smoking的实现类
class Teacher implements Smoking{
    //接口中只是方法体,是抽象方法,所以要重写方法
    public void smoke(){
        System.out.println("抽烟有害健康");
    }
}

2、接口的特点

接口创建对象的特点:

①接口不能实例化,可通过多态的方式实例化其子类对象

②接口的子类可以是抽象类,也可以是普遍类

接口继承关系的特点:

类与接口之间是实现的关系

接口与接口之间的关系:继承关系,可以是单继承也可以是多继承:接口 extends 接口1,接口2,接口3...

继承和实现的区别:继承体现的是“is a”的关系,父类中定义共性内容

                                   实现体现的是“like a”的关系,接口中定义扩展功能

package com.wang.duixiang;

public class InterfaceDemo02 {
    public static void main(String[] args) {
        //测试鼠标类
        USB usb=new Mouse1();
        usb.open();
        usb.close();
        //
    }
}
//鼠标类 普通类,重写接口中的成员方法
class Mouse1 implements USB,A,B,C{//多实现
   public void open(){
       System.out.println("打开鼠标");
   }
   public void close(){
       System.out.println("断开鼠标连接");
   }
}
//键盘类 抽象类,不需要重写接口中的方法
abstract class  KeyBoard implements USB{  
}

//接口多继承
public interface C extends A,B,USB {
}

3、接口成员的特点

接口成员变量的特点: 接口没有成员变量,只有公有的、静态的常量。因为接口中所有的变量都有默认的修饰符public static final 常量名=常量值

接口成员方法的特点: 有抽象方法:public abstract 返回值类型 方法名();

                                           默认方法:public default 返回值类型 方法名(){}

                                           静态方法:static 返回值类型 方法名(){}

                                           私有方法:private 返回值类型 方法名(){}

接口构造方法的特点: 接口不能实例化,也没有需要初始化的成员,所以接口没有构造方法

public class InterfaceDemo03 {
    public static void main(String[] args) {
    //测试接口中的成员变量
        System.out.println(USB.NUM);//可以直接调用是因为num前有默认的修饰符public static final
        //USB.NUM=20; 报错 num是常量,值不能被修改
    }}

public interface USB {
    int NUM=10;//接口中默认都是常量,要符合常量命名规范
    //成员方法  public abstract是默认修饰符
    public abstract void open();
    void close();
    //jdk8之后:
    //可以写静态方法
    public static void method(){
        System.out.println("我是jdk8的新特性");
    }
    //可以写默认方法
    public default void method1(){
        System.out.println("不写static时要加default");
    }
    /*jdk9之后:私有方法
    private void method2(){
        System.out.println("");
    }
       */
       //public USB(){} 报错,因为接口中没有构造方法  
}

 

posted @ 2019-10-30 10:18  王迎婧  阅读(190)  评论(0编辑  收藏  举报