有一个面试四连击的题目:接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类?抽象类中是否可以有静态的main方法?
上面这个题目我们来慢慢的剖析一下。先从基本的概念说起。
一、接口
官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。
又到了我最喜欢打比方的环节了:我们身边最常见的接口就是电脑的usb接口了。我们可以想想,我们电脑的usb接口是不是就那么几个但是没有任何的具体的功能?但是当我们把u盘插到usb接口的时候,我们可以进行数据的传输;
当我们把鼠标插入usb接口的时候,我们可以左键打开网页、文件夹等更多的功能;当我们把键盘插入到usb接口的时候我们可以打字,等等。虽然接入不同的设备可以进行不同的操作,但是上述的设备操作都是和电脑的数据交互。
所以电脑在设置usb接口的时候,并没有实现具体的读写数据的功能,而是但不同的设备接入usb接口就可以实现不同的数据读写功能。这就是接口的好处,试想:如果每个接口都有特定的功能,鼠标要插这个接口,键盘插那个接
口。那电脑就全是接口了,大大的浪费了资源,而且还不好看。
接口的特点以及重点:
1、并不能直接去实例化一个接口,因为接口中的方法都是抽象的,是没有方法体的。但是,我们可以使用接口类型的引用指向一个实现了该接口的对象(键盘、鼠标,…),并且可以调用这个接口中的方法。
2、一个类可以实现不止一个接口。键盘可以连接戴尔的接口、华硕的接口、联想的接口。
3、接口也可以继承,并且可以多继承。一个接口可以继承于另一个接口,或者另一些接口。比如现在的很多人电脑的usb接口不够用,所以有了usb接口拓展。
4、接口中所有的方法都是抽象的和public的,所有的属性都是public,static,final的。
5、一个类如果要实现某个接口的话,那么它必须要实现这个接口中的所有方法。我们在使用编辑器编写的时候就会自动提示:
否则的话会报错:
接口的实例:
public interface Demo8 {
void say();
int add();
}
public class Demo7 implements Demo8 {
public static void main(String[] args) {
Demo7 demo7 = new Demo7();
demo7.say();
System.out.println(demo7.add());
}
public void say() {
System.out.println("你好啊");
}
public int add() {
int i=1;
int j=2;
return i+j;
}
}
public interface Demo9 extends Demo8{
void print(String name);
}
一个类实现 一个接口,如果这个接口继承了另一个接口,那么这个类除了实现这个接口的所有方法以外,还要实现被继承的那个接口的所有方法:
public class Demo10 implements Demo9 {
public static void main(String[] args