接口技术用于描述类具有什么功能,但不给出具体实现,类要遵从接口描述的统一规则进行定义,所以,接口是对外提供的一组规则、标准。
定义接口使用关键字interface:interface 接口名{}
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("抽烟有害健康"); } }
接口创建对象的特点:
①接口不能实例化,可通过多态的方式实例化其子类对象
②接口的子类可以是抽象类,也可以是普遍类
接口继承关系的特点:
类与接口之间是实现的关系
继承和实现的区别:继承体现的是“is 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 { }
接口成员变量的特点: 接口没有成员变量,只有公有的、静态的常量。因为接口中所有的变量都有默认的修饰符public static final 常量名=常量值
接口成员方法的特点: 有抽象方法:public abstract 返回值类型 方法名();
默认方法:public default 返回值类型 方法名(){}
私有方法: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(){} 报错,因为接口中没有构造方法 }