前言
一、接口的定义
二、接口的特征
三、接口的实现
四、接口的继承
五、面试题
父类和抽象类以及接口的侧重点是什么?
如何在接口中定义一个默认方法(实现类可以不重写这个方法)
总结
在抽象类中,可以包含一个或多个抽象方法;但在接口(interface)中,所有的方法必须都是抽象的,不能有方法体,它比抽象类更加“抽象”。
接口使用 interface 关键字来声明,可以看做是一种特殊的抽象类,可以指定一个类必须做什么,而不是规定它如何去做。
Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
接口定义的一般形式为:
[访问控制符]interface <接口名> {
[public static final] 类型 符号常量名n = 常数;
[public abstract] 返回值类型 方法名([参数列表]);
…
}
注意:[ ]里面的内容可写可不写,因为接口的成员变量默认是public static final
修饰的,也只能是public static final
修饰,方法都是抽象方法
1、Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显示初始化,即接口中的成员变量为常量
2、Java接口中的方法默认都是public,abstract类型的(都可省略),没有方法体,
3、Java接口中只能包含public,static,final类型的成员变量和public,abstract类型的成员方法
4、接口中没有构造方法,不能被实例化
5、一个接口不能实现(implements)另一个接口,但它可以继承(extends)多个其它的接口
6、Java接口必须通过类来实现它的抽象方法
7、当类实现了某个Java接口时,它必须实现接口中的所有抽象方法,否则这个类必须声明为抽象类
8、一个类只能继承一个直接的父类,但可以实现多个接口,间接的实现了多继承
代码如下(示例):
首先,我们要先定义一个接口,这里我用一个名字为Usb的接口
public interface Usb {
int a =10;
void service();
}
现在我们已经定义了一个Usb接口,那现在我们来写一个名为UDisk的类来实现接口。
public class UDisk implements Usb {
@Override
public void service() {
System.out.println("连接USB接口,开始传输数据");
}
}
注意: 接口的实现使用implements关键字,这是与类的继承extends不同的;实现类中,必须重写接口中定义的方法!
使用时,如下代码方法:
public static void main(String[] args) {
Usb uDisk =new UDisk();
uDisk.service();
}
与类的继承相同的是:接口也可称做实现类(即本案例中的UDisk类)的父类,实现类对象自动转型为接口类型,多态机制同子父类继承时是同样的原理。
与类的继承不同的是:一个类可以实现多个接口。
例如,我们再定义一个接口
public interface Storable {
String doSave();
}
实现类UDisk
public class UDisk implements Usb, Storable {
//实现接口中的方法
@Override
public void service() {
System.out.println("连接USB接口,开始传输数据");
}
public String doSave(){
String s="我可以存储512G的数据";
return s;
}
}
现在再使用时,UDisk类的对象即可以是Usb的,也可以是Storable类型的。也是说:一个类可以实现多个无关紧要的接口,这样就能实现多继承.
使用代码
public static void main(String[] args) {
//做为Usb:
Usb usb=new UDisk ();
usb.service();
//做为Storable:
Storable store=new UDisk();
System.out.println(store.doSave());
}
在java中,类可以通过extends继承类,类可以通过implements关键字实现接口;接口与接口之间,也可以通过extends关键字实现继承,与类继承不同的是,一个接口同样可以继承多个接口,例如:
/**形状接口的定义:这个接口继承了另外两个接口*/
public interface NetJavaShape extends OtherShape,java.io.Serializable{
public final static String compName="华信";
//接口中定义的方法
void draw(int x1,int y1,int x2,int y2);
}
现在,我们的NetJavaShape继承了两个接口,(java.io.Serializeable接口是JDK中接供的一个接口,这个接口中没有任何方法实现,只是用来做标志用---实现了这个接口的类的对象可以被保存到文件中)。
如果某个类要实现NetJavaShape,就必须全部实现NetJavaShape接口中定义的方法和它的父接口中定义的方法。
父类——侧重公共属性进行定义
抽象类——公共属性进行定义 公共行为、方法
接口——侧重的是行为定义
使用default关键词,修饰方法,实现类可以不重写这个方法
以上就是本文章对于Java的接口的基本概念的理解,具体可以自己在项目中实践。