1.接口概述:为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些类需要拓展功能直接把这些额外功能实现即可
2.接口特点
1.接口用关键字interface表示
格式:interface 接口名 {}
2.接口里面写抽象方法
3.类实现接口用implements表示
格式:class 类名 implements 接口名 {}
3.接口实例化方法
1.按照多态的方式,由具体的子类实例化。其实这也是多态的一种,接口多态。
2.接口的子类 要么是抽象类 要么重写接口中的所有抽象方法
//定义动物特殊功能 interface AnmialTool{ public abstract void show(); public abstract void work(); } //抽象类实现接口 abstract class Cat implements AnmialTool{ @Override public void show(){ System.out.println("钻火圈"); } } //非抽象类重写接口所有抽象方法 class Dog implements AnmialTool{ @Override public void show() { System.out.println("反复横跳"); } @Override public void work() { System.out.println("挣钱"); } } public class InterfaceDemo { public static void main(String[] args) { // AnmialTool anmialTool=new AnmialTool() ;错误写法,接口不能实例化 //接口多态实现接口实例化 // AnmialTool cat=new Cat() ;错误写法,因为Cat类是抽象类,也不能实例化 AnmialTool dog=new Dog() ; dog.show();//反复横跳 dog.work();//挣钱 } }
4.接口成员的特点
成员变量:只能是常量,而且是静态的
通过反编译观察发现,它对成员变量是有默认修饰符:public static final
如果我们不写,默认加上
推荐:手动全部给出
构造方法:接口里面没有构造方法,因为接口主要是扩展功能的,而没有具体存在
成员方法:只能是抽象方法,没有方法体
通过反编译观察发现,它对方法是有默认修饰符:public abstract void
如果我们不写,默认加上
推荐:手动全部给出
注意:
虽然接口里面没有构造方法,但是我们说过,所有的类都继承一个超类:Object
Class Object是类Object结构的根。 每个class都有Object作为超类
所有的对象都实现了该类里面的方法
interface Tool{ int num =3; public abstract void tools(); } class Port implements Tool{ @Override public void tools() { System.out.println("接口功能实现"); } } public class InterfaceDemo2 { public static void main(String[] args) { Tool tool = new Port(); tool.tools();//接口功能实现 System.out.println(tool.num);//3 } }
接口Tool.class文件反编译结果
5.类与类,类与接口以及接口与接口的关系
1.类与类之间的关系
继承关系,只能单继承,不能一次性继承多个,但是可以多层继承
2.类与接口之间的关系
实现关系,类可以单个实现接口,也可以一次性实现多个接口,可以在继承一个类的时候,实现多个接口,每个类默认继承自Object类
3.接口与接口之间的关系
没有实现关系,只有继承关系,接口可以单继承一个接口,接口也可以一次性继承多个接口,可以多继承
interface Inter1{ } interface Inter3{ } //接口可以单继承一个接口,接口也可以一次性继承多个接口 interface Inter2 extends Inter1,Inter3{ } class Father{ } //类可以单个实现接口,也可以一次性实现多个接口, 可以在继承一个类的时候,实现多个接口 class Son extends Father implements Inter1,Inter2{ } public class InterfaceDemo3 { public static void main(String[] args) { } }
6.抽象类和接口的区别
1.成员区别
成员变量 | 成员方法 | 构造方法 | |
抽象类 | 变量,常量 | 抽象方法,非抽象方法 | 构造方法(不能直接实例化) |
接口 | 常量 |
抽象方法 |
只有继承超类object的构造方法 |
2.关系区别
类与类 继承,单继承
类与接口 实现,单实现,多实现
接口与接口 继承,单继承,多继承
3.设计理念区别
抽象类 被继承体现的是:”is a”的关系。共性功能
接口 被实现体现的是:”like a”的关系。扩展功能