JAVA接口的定义和使用

我们知道知道java中只支持单继承,但如果我们想定义一些功能,想让一个子类都继承实现,没办法做到,所有Java提供了接口这个概念,这样我们就可以用一个子类去实现多个接口。我们可以理解为接口就是特殊的抽象类
接口可以包括数据成员,但是数据成员必须是常量,其值一旦被初始化后,是不允许修改的,这些数据成员通常为全局变量。
为了避免在接口中添加新方法后要修改所有的实现类,接口中允许定义默认方法(default方法)。
定义接口需要使用关键字interface

定义接口实例:

interface A{ //定义一个接口

public static final String MESSAGE=”HelloWorld”; //全局常量

public abstract void print(); //定义抽象方法

default public void otherprint(){ //定义可以带方法体的默认方法

System.out.println(“默认方法”);

}  

}
接口中成员属性默认是public static final修饰,成员方法是public abstact修饰,所以上述定义可以简写

代码演示:

interface A{ //定义一个接口

String MESSAGE=”HelloWorld”; //全局常量

void print(); //定义抽象方法

default void otherprint(){ //定义可以带方法体的默认方法

System.out.println(“默认方法”);

}

}
接口使用原则:
1.接口必须有子类,子类依靠implements关键字可以同时实现多个接口;

2.接口的子类(如果不是抽象类)必须实现接口之中的全部抽象方法;

3.接口可以利用对象多态性,利用子类实现对象的实例化

4.接口和普通的类一样,本身也有数据成员和方法,但数据成员一定要初始赋值,并且此值不能再有修改,定义的方法可以有抽象方法和默认方法,抽象方法abstact关键字可以省略,默认方法需要带上default关键字,默认方法可以带有方法体。

5.默认方法的调用和普通方法的调用一样

接口的使用:
我们来举个例子,定义一个抽象类People,一个普通子类Student,两个接口。子类Student继承父类People,并实现接口Study,Write

代码演示:

//构建一个抽象类People
abstract class People{
//父类属性私有化
private String name;
private int age;
//提供父类的构造器
public People(String name,int age){
this.name = name;
this.age = age;
}
//提供获取和设置属性的getter()/setter()方法
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
//提供一个抽象方法
public abstract void talk();
}

//定义一个接口
interface Study{
//设置课程数量为3
int COURSENUM = 3;
//构建一个默认方法
default void stu(){
System.out.println(“学生需要学习”+COURSENUM+”门课程”);
}
}

//再定义一个接口
interface Write{
//定义一个抽象方法
void print();
}

//子类继承People,实现接口Study,Write
class Student extends People implements Study,Write{
//通过super关键字调用父类的构造器
public Student(String name, int age) {
super(name, age);
}
//实现父类的抽象方法
public void talk() {
System.out.println(“我的名字叫”+this.getName()+”,今年”+this.getAge()+”岁”);
}
//实现Write接口的抽象方法
public void print() {
System.out.println(“学生会写作业”);
}
}

public class InterfaceDemo{
public static void main(String[] args) {
//构建student对象
Student student = new Student(“dodo”, 22);
//调用父类的抽象方法
student.talk();
//调用接口Write中的抽象方法
student.print();
//调用接口Study中的默认方法
student.stu();
}
}
接口的实现:类名 implements 接口名,有多个接口名,用“,”隔开即可。

猜你喜欢

转载自blog.csdn.net/dove_dove_1802/article/details/82054552