当一些人谈到继承的Java OOP 范式时,他们通常指的是用一个继承者扩展一个父类,一个子类。但是,当您遇到 Java implements 关键字时,这意味着我们进入了另一个抽象级别并开始使用 Java 中的接口。我们将讨论接口是什么、它们的用途以及实现是如何发生的。
什么是接口和实现
您可能多次听说过“接口”这个词。例如,计算机有输入接口(鼠标和键盘),许多程序都有用户界面。从广义上讲,接口是两个交互方之间的链接。例如,相同的键盘或电视遥控器。在编程中,尤其是在 Java 中,接口是一个特定的契约,它说明实现它的类将做什么。接口仅定义行为。它没有说明将实现它的对象。您可以像这样在 Java 中声明一个接口:
public interface MyInterface {
// constants declaration
// methods without implementation
// static methods
// default methods (default)
// private methods
}
下面是Java 中 Implements 的语法:
public class MyClass implements MyInterface{
//implementing the methods of MyInterface
//Other code
}
接口描述行为而不指定它。例如,“运动”等行为可以应用于不同类型的对象:自行车、人、汽车、河水等。游泳的行为可以是鸭子、船或鱼的行为。除了可以移动或游泳之外,这些物体没有任何共同点。是的,游泳的运动非常不同。但是,在 Java 中,您可以创建Duck、Boat、Fish类并让它们实现游泳的能力。这是使用 Java Implements关键字的地方。
实施关键字示例
public interface Swimmable {
void moveForward();
void TurnRight();
void TurnLeft();
}
如您所见,方法本身并未实现。但是我们声明实现这个接口的类必须能直线游动,也能左右转。让我们创建将实现此接口的类。
public class Duck implements Swimmable {
//implementing the methods
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
}
public class Fish implements Swimmable {
public void moveForward() {
System.out.println("I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft() {
System.out.println("I am turning left...");
}
public void turnUp(){
System.out.println("I am turning up...");
}
public void turnDown(){
System.out.println("I am turning down...");
}
public void Stop() {
System.out.println("I am relaxing somewhere under the water surface...");
}
}
根据约定,所有实现Swimmable接口的类都必须能够向前游(实现 moveForward ()方法),以及向右和向左转。需要实施这些方法。鸭子和鱼游的方式不同。假设一条鱼有两个额外的方法来实现它向上和向下游动的能力。Swimmable 接口没有这个。但是,如果我们创建 Fish 类的子类,例如 Tuna 或 Salmon,它们就像所有“Fish”一样,能够上下游动。
Java 中的多个接口
您可能已经知道,Java 不支持多重继承。这意味着一个类只能从一个超类继承。然而在某种程度上你仍然可以在 Java 中使用“多重继承”,因为一个类可以实现多个接口。
To implement multiple interfaces, use the next syntax:
interface MyFirstInterface {
public void myMethod();
}
interface MySecondInterface {
public void myOtherMethod();
}
// MyClass implements both MyFirstInterface and MySecondInterface
class MyClass implements MyFirstInterface, MySecondInterface {
public void myMethod() {
//method implementation
}
public void myOtherMethod() {
//method implementation
}
}
多接口示例
请记住,鸭子不仅会游泳,还会飞。让我们编写飞行接口并在我们的鸭子中实现它。
public interface Flyable {
double startAge = 0.1;
void fly();
}
public class Duck implements Swimmable, Flyable {
public void moveForward() {
System.out.println(" Quack, I am moving forward...");
}
public void TurnRight(){
System.out.println("I am turning right...");
}
public void TurnLeft(){
System.out.println("I am turning left...");
}
public void Stop() {
System.out.println("Quack. I am relaxing on the surface of the water...");
}
public void fly(){
System.out.println("I am flying!!!");
}
}
同样,重要的是要记住我们为什么要编写界面。比方说,如果由鸟、飞机、跳伞者和蒲公英来实现,它们的飞行将完全不同。
GO TO FULL VERSION