1.接口的概念
现实中的接口:
电脑上的USB上,可以插:键盘、鼠标……
电源上的插孔上,可以插:手机,电脑……
Java中的接口,你可以把它当作一个特殊的类,不同的是接口的成员没有执行体,是由全局常量和公共的抽象方法所组成。
2.接口的格式
把定义类中的class换成interface就可以了。
public interface 接口名称{ //抽象方法,以下四种都可以 public abstract void method1(); public void method2(); abstract void method3(); void method4(); }
细节:
- 接口名称一般用形容词;
- 接口名称一般在前面加一个 ' I ';
- 接口中的方法和属性前面最好啥都不写,保持代码的简洁性;
3.接口的使用
- 接口不能直接使用,必须要有一个“实现类”实现该接口,实现该接口中的所有方法;
- 接口与类之间通过implements来实现;
1. public class 类名称 implements 接口名称{ 2. //…… 3. }
4.接口的特性
4.1接口是一种引用类型,但是不能通过直接new接口的对象
public interface USB{ void method(); } public class Test4 { public static void main(String[] args) { USB usb = new USB();//编译错误 } }
4.2接口中的方法只能public修饰
1. public interface USB{ 2. //private void method();//此处不可以使用private 3. void method(); //默认 public abstract 4. }
4.3接口中的方法不能在接口实现
public interface USB{ void method(); //下面错误代码 void method1(){ System.out.println("编译错误"); } }
4.4重写接口方法时,不能使用默认的访问权限
interface USB{ void method1();//默认public void method2();//默认public } class Mouse implements USB{ @Override void method1() {//编译报错,不能使用默认修饰符 System.out.println("打开鼠标"); } @Override public void method2() { System.out.println("打开鼠标"); } }
4.5接口中的变量默认被final public static修饰
interface USB{ int a = 0; } public class Test4 { public static void main(String[] args) { System.out.println(USB.a);//可以通过接口名访问,说明是静态的 //USB.a = 1; 编译错误,说明是不可修改的变量 } }
4.6接口中不可以有静态代码块,构造方法
4.7接口虽然不是类,但接口编译后的字节码文件也是.class
4.8如果类没有实现接口中所有的抽象方法,则必须设置成抽象类
5.实现多个接口
Java中,一个子类只能继承一个父类,但是一个类可以实现多个接口。
举例:
//会跑的 interface IRunning{ void run(); } //会飞的 interface IFlying{ void fly(); } //会游的 interface ISwimming{ void swim(); } //狗类,会跑,会游 class Dog implements IRunning,ISwimming{ public Dog() { } @Override public void run() { } @Override public void swim() { } }
6.接口之间的继承
在Java中,类与类之间是单继承,一个类可以继承多个接口,接口与接口可以实现多继承。利用接口可以实现多继承的目的。
相当于把多个接口拼在一起。
interface IRunning { void run(); } interface ISwimming { void swim(); } // 两栖的动物, 既能跑, 也能游 interface IAmphibious extends IRunning, ISwimming { } class Frog implements IAmphibious { ... }