gpt4 book ai didi

Java 为什么需要实现接口(interface)?

转载 作者:行者123 更新时间:2023-12-02 06:38:51 24 4
gpt4 key购买 nike

我刚刚开始学习 Java,并且正在查看在线示例: http://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html

然后我必须实现一个接口(interface),虽然我理解它背后的概念,但对我来说这似乎很奇怪,因为在接口(interface)声明中你只定义了它,而在实现这个接口(interface)的类中你仍然需要写出它的功能。那么为什么要使用它呢?

我尝试了示例代码,然后更改代码以删除界面,它们的工作原理都是相同的。所以我的问题是什么时候会使用实现接口(interface)?对我来说这看起来没有必要。提前致谢!

在线示例代码:

public class RectanglePlus 
implements Relatable {
public int width = 0;
public int height = 0;
public Point origin;

// four constructors
public RectanglePlus() {
origin = new Point(0, 0);
}
public RectanglePlus(Point p) {
origin = p;
}
public RectanglePlus(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public RectanglePlus(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}

// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}

// a method for computing
// the area of the rectangle
public int getArea() {
return width * height;
}

// a method required to implement
// the Relatable interface
public int isLargerThan(Relatable other) {
RectanglePlus otherRect
= (RectanglePlus)other;
if (this.getArea() < otherRect.getArea())
return -1;
else if (this.getArea() > otherRect.getArea())
return 1;
else
return 0;
}
}

我改的代码,去掉界面,还是一样的

public class RectanglePlus {
public int width = 0;
public int height = 0;
public Point origin;

// four constructors
public RectanglePlus() {
origin = new Point(0, 0);
}
public RectanglePlus(Point p) {
origin = p;
}
public RectanglePlus(int w, int h) {
origin = new Point(0, 0);
width = w;
height = h;
}
public RectanglePlus(Point p, int w, int h) {
origin = p;
width = w;
height = h;
}

// a method for moving the rectangle
public void move(int x, int y) {
origin.x = x;
origin.y = y;
}

// a method for computing
// the area of the rectangle
public int getArea() {
return width * height;
}

// a method required to implement
// the Relatable interface
public int isLargerThan(RectanglePlus otherRect) {

if (this.getArea() < otherRect.getArea())
return -1;
else if (this.getArea() > otherRect.getArea())
return 1;
else
return 0;
}

public static void main( String[] args )
{

RectanglePlus newRect = new RectanglePlus(20, 30);
RectanglePlus somerect = new RectanglePlus(50, 100);

System.out.println("Area of newRect is " + newRect.getArea());

System.out.println("Area of somerect is " + somerect.getArea());

if((newRect.isLargerThan(somerect))==1)
{
System.out.println("newRect is bigger");
}
else
{
System.out.println("somerect is bigger");
}

}

}

最佳答案

两个原因:

  1. 如果您有多个接口(interface)的实现。假设您有 Shape 并且子类型是 RectangleOval 等。如果您想编写可以对一般形状执行某些操作的代码,您可以需要一个所有子类型都实现的接口(interface) - 该接口(interface)是您知道任何 Shape 都将具有的方法集。

  2. 如果您正在编写 API - 您正在编写其他人将使用的库。你为其他人提供接口(interface)——这是他们可以调用的东西。您将实现接口(interface),并且实现类可能有更多方法 - 并且您希望稍后能够更改这些方法,但是您的用户应该能够选择库的新版本并将其与旧代码一起使用。通过将接口(interface)与实现分离,您可以为公众提供他们可以使用的东西,但为自己保留一些您可以在不伤害现有用户的情况下进行更改的东西。

关于Java 为什么需要实现接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19354693/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com