首先,我们先了解一下Java中抽象类与继承。
abstract
可以定义抽象类,extends
可以定义继承。但是对于Java这个语言,它的继承相对与CPP它舍弃了多继承,防止关系太多耦合,易混淆。
多继承会造成
1、若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量
2、若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。
Java里面,是不可以多继承的!
但是我们有时候也是需要多继承的。
于是我们可以使用某些方法替代多继承。
一般都是接口来实现多继承。
那说了这么多,啥是接口?
接口与抽象类有几个共同的,与继承也有类似之处。
接口在JAVA编程语言中是一个抽象类型,是抽象方法的集合。
我们先来看看网上的说法:
接口可以理解为一种特殊的类,里面全部是由*全局常量*和公共的抽象方法所组成。接口是解决*Java无法使用多继承*的一种手段,但是接口在实际中更多的作用是*制定标准*的。或者我们可以直接把接口理解为*100%的抽象类*,既接口中的方法*必须全部*是抽象方法。 官方的解释是这样的: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)
final
的变量,但是在接口中存在的变量一定是final
,public
,static
的。声明一个接口,我们使用interface
这个关键字
定义了接口之后,我们需要注意:
JDK 1.8 以后,接口里可以有静态方法和方法体了。 JDK 1.8 以后,接口允许包含具体实现的方法,该方法称为"默认方法",默认方法使用 default 关键字修饰。 JDK 1.9 以后,允许将方法定义为
private
,使得某些复用的代码不会把方法暴露出去。
这样我们就可以定义一个方法,在IDEA中我们可以直接创建!
在接口中,我们用implements
关键词来对接接口。假设我们定义一个接口类叫Text,普通类叫Demo。
定义接口
public interface Text {
//下面定义了两个方法
//没有方法体哦!!!
String getName();
void show();
}
接入接口
public class Demo implements Text {
}
使用接口中的方法
public class Demo implements Text {
//在子类Demo中重写Text就可以
@Override
public String getName() {
return "我被重写了";
}
@Override
public void show() {
System.out.println("Hello Word");
}
}
调用输出
public class ShowDemo {
public static void main(String[] args) {
Text text = new Demo();
test.getName();
text.show();
}
}
这样我们就调用了这个接口的方法。
注意:必须要重写接口里面的方法哦!