jdk1.8开始,接口中支持定义默认实现的方法
jdk1.8之前不支持,只能定义抽象方法
📣 问题描述:Java类实现某个接口后,是否需要实现接口中的所有方法?
📖 答 : 如果是普通的类,必须去实现接口里所有的方法,如果是抽象类,则可以不去实现。
首先定义一个卖火车票的接口:定义两个方法
创造一个类来实现买票接口,先实现一个方法,很明显idea给出提示爆红
Class 'TrainStation' must either be declared abstract or implement abstract method 'pay()' in 'SellTickets'
继续实现第二个方法后发现idea去除爆红
我们发现如果该类是抽象类不实现对应方法也不会爆红
如果子类是抽象类,则可以不实现接口中的所有方法,因为抽象类中允许有抽象方法的存在!
📝 相关代码感兴趣实践运行
public interface SellTickets {
void sell();
void pay();
}
/**
* @version v1.0
* @ClassName: TrainStation
* @Description: 火车站类
* @Author:
*/
public class TrainStation implements SellTickets {
public void sell() {
System.out.println("火车站卖票");
}
@Override
public void pay() {
System.out.println("实现pay方法");
}
}
答案:
问题:为什么接口中有些方法没有方法体?
这是因为在接口中定义的方法默认是抽象方法,不需要具体的方法实现,这使得接口成为了一种定义规范和约束的工具,以便其他类进行实现。如果一个类想要实现这个接口,就必须要实现这个接口中的所有抽象方法。
代码示例:
public interface ExampleInterface{ void doSomething(); //抽象方法 void doSomethingElse(); //抽象方法 //可以定义常量,不需要关键字final int MAX_COUNT = 100; }
下面是一个实现了该接口的类:
public class ExampleClass implements ExampleInterface{ //实现接口中的抽象方法 public void doSomething(){ //具体的方法实现 } public void doSomethingElse(){ //具体的方法实现 } }
如果一个类实现了接口,但是只实现了其中的部分抽象方法,那么它必须声明为一个抽象类。因此,Java接口中可以定义全局常量、默认方法、静态方法,但是不能定义实例构造函数和普通成员变量。
参考资料:https://www.runoob.com/java/java-interfaces.html