📝 接口是一系列方法声明的集合(和抽象类类似)
📝 接口是用来定义规范和标准的
📝 接口通过interface
关键字定义
📝 类可通过implements
关键字实现接口中的方法
📝 接口中可定义抽象方法
📓 需求:家长请家教教小孩子👶学习(家教👨🏫的需求:① 会教画画;② 会教音乐🎼;③ 会教数学)
📓 把需要老师具备的能力抽象为方法(如:teachDrawing、teachMusic、teachMath)
📓 定义一个接口(通过interface
关键字),在接口中定义抽象方法(teachDrawing、teachMusic、teachMath)
📓 这个接口是能够当家教老师的人需要遵循的规范、能够当家教老师的人需要遵循的规范标准
📓 认为自己能够胜任家教老师的人需要实现(implements
)该接口中所有方法
孩子类:
public class Child {
private String name;
private Teacherable teacherable;
public String getName() {
return name;
}
public Child(String name) {
this.name = name;
}
public void setTeacherable(Teacherable teacherable) {
this.teacherable = teacherable;
}
public void study() {
teacherable.teachDrawing(this);
teacherable.teachMusic(this);
teacherable.teachMath(this);
}
}
Teacherable 接口:
/**
* 能够胜任家教老师的人都必须实现 Teacherable 里面的三个方法
*/
public interface Teacherable {
public abstract void teachDrawing(Child child);
public abstract void teachMusic(Child child);
public abstract void teachMath(Child child);
}
Student 学生类实现 Teacherable 接口:
public class Student implements Teacherable {
@Override
public void teachDrawing(Child child) {
System.out.println("Student teaches【" + child.getName() + "】画画");
}
@Override
public void teachMusic(Child child) {
System.out.println("Student teaches【" + child.getName() + "】音乐");
}
@Override
public void teachMath(Child child) {
System.out.println("Student teaches【" + child.getName() + "】数学");
}
}
Robot 机器人类实现 Teacherable 接口:
public class Robot implements Teacherable {
@Override
public void teachDrawing(Child child) {
System.out.println("Robot 教【" + child.getName() + "】画画");
}
@Override
public void teachMusic(Child child) {
System.out.println("Robot 教【" + child.getName() + "】音乐");
}
@Override
public void teachMath(Child child) {
System.out.println("Robot 教【" + child.getName() + "】数学");
}
}
TestDemo 测试类:
public class TestDemo {
public static void main(String[] args) {
Child qy = new Child("庆医");
// qy.setTeacherable(new Student());
qy.setTeacherable(new Robot());
qy.study();
}
}
📓 抽象方法:被abstract
修饰的方法
📓 常量:static final
📓 嵌套类型
📓 从 Java8 开始还可以定义:默认方法(被default
修饰的方法)、静态方法(被static
修饰的方法)
📓 上述可以定义的内容都是隐式public
的(默认就是public
,开发者定义的时候可以省略)
📓 接口中定义的方法默认就是抽象方法(开发者在接口中定义方法的时候可以abstract
关键字)
📓 从 Java9 开始可以定义private
方法
📓 定义常量的时候可以省略 static 和 final
📓 不能自定义构造方法、不能定义(静态)初始化块
📓 接口没有实例化的说法
public interface Testable {
int MY_MONEY = 859632587;
void test1();
void test2(String description);
class Demo {
}
static void test3() {
System.out.println("接口中可以定义静态方法");
}
}
📝 接口是引用数据类型
📝 一个类可以通过implements
关键字实现一个或多个接口
📝 实现(implements
)接口的类必须实现接口中的所有抽象方法(除非它是一个抽象类)
📝 若一个类实现的多个接口中有相同的抽象方法,该相同的抽象方法只需要被实现一次
📝 extends
和implements
可以一起使用(implements
必须写在extends
的后面)
✒️ 当父类和接口中的方法的方法签名一样的时候,返回值类型也必须一样
public class BaseTestDemo {
public String test(String description) {
return description;
}
}
public interface Testable {
String test(String description);
}
public class TestDemo extends BaseTestDemo implements Testable {
public static void main(String[] args) {
TestDemo testDemo = new TestDemo();
// Happy
System.out.println(testDemo.test("Happy"));
}
}
📝 一个接口可以通过extends
关键字继承一个或多个接口
✒️ 当多个父接口中的方法的方法签名一样的时候,返回值类型也必须一样
📱 结束!如有错误,请不吝赐教!