? ? 接口是一种抽象的数据类型,它定义了一组方法的规范,但没有具体的实现。接口可以被类实现,一个类实现了接口后,必须实现接口中定义的所有方法。接口可以被多个类实现,用以实现多重继承。
接口的定义使用关键字interface
,并且可以包含以下内容:
public static final
。public
,并且不能包含方法体。实现接口的类必须实现接口中的所有抽象方法。? ? ? ?通过实现接口,类可以具有多态性,同时可以实现不同的接口来实现多重继承的效果。
? ?接口的作用主要有以下几点:
实现多继承:Java不支持多继承,一个类只能继承一个父类,但一个类可以实现多个接口。通过实现接口,一个类可以获得多个接口定义的方法。
实现特定的行为:接口可以定义一组特定的行为,一个类如果实现了该接口,就必须实现接口定义的所有方法。这样可以确保一组相关的类具有一致的行为。
实现解耦和扩展:接口可以将类之间的耦合度降低,使得各个类之间的关系更加灵活。通过接口,可以定义对外提供的一组方法,而不需要关心具体的实现细节。这样,当需要修改具体实现时,只需修改实现类,而不需要修改接口定义。
实现回调函数:接口可以用于实现回调函数。回调函数是一种程序设计模式,在某些事件发生时,系统会通过调用接口中的方法来通知相应的类。通过回调函数,可以实现异步处理、事件驱动等功能。
? ? ?接口的应用场景有以下几种:
? ?接口的实例代码:
interface Animal {
void eat();
void sleep();
}
class Cat implements Animal {
public void eat() {
System.out.println("Cat eats fish");
}
public void sleep() {
System.out.println("Cat sleeps on bed");
}
}
class Dog implements Animal {
public void eat() {
System.out.println("Dog eats bone");
}
public void sleep() {
System.out.println("Dog sleeps in dog house");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
cat.eat();
cat.sleep();
Dog dog = new Dog();
dog.eat();
dog.sleep();
}
}
? ? ? ? 首先,我们定义了一个叫做Animal
的接口,它包含了两个方法:eat()
和sleep()
。这两个方法没有具体的实现,只是声明了方法的存在。
? ? ? 然后,我们创建了两个类Cat
和Dog
,它们分别实现了Animal
接口。这意味着这两个类必须要实现eat()
和sleep()
方法,并提供具体的实现。
? ? ? 在Main
类中,我们创建了一个Cat
对象和一个Dog
对象,并调用它们的eat()
和sleep()
方法。由于它们都实现了Animal
接口,所以可以使用相同的代码来调用这些方法。
interface
关键字来定义,接口名应该按照Java类的命名规范来命名。接口可以包含常量、抽象方法和默认方法。public interface MyInterface {
// 常量
public static final int MY_CONSTANT = 10;
// 抽象方法
public void doSomething();
// 默认方法
public default void doDefault() {
// 实现代码
}
}
implements
关键字来实现接口。public class MyClass implements MyInterface {
@Override
public void doSomething() {
// 实现代码
}
}
一个类可以实现多个接口,实现接口的类必须实现接口中的所有抽象方法。
extends
关键字来继承。public interface MyInterface2 extends MyInterface {
// 可以定义新的抽象方法
public void doSomething2();
}
继承接口可以使得接口具有更多的行为规范,并且实现这个接口的类需要实现所有继承的抽象方法。