所以,我试图学习Java中的接口类是如何工作的,我真的很困惑。
我不想让它像普通类文件中的方法一样:
public class APIClass {
private int davs;
public int setInt(int dav) {
this.davs = dav;
return davs;
}
public int getInt() {
return davs;
}
}
两个方法。一个是整型"davs",另一个是整型"davs"
我不想在界面中做这样的事情。我在其他接口文件中看到过这样的内容:
public interface MyInterface {
public MyInterface setInt(int davs);
public MyInterface getInt();
}
编辑:我的问题是,我不知道我可以用这个界面做什么?我所看到的使用它,在一个新的类文件中声明相同的方法,然后他们真的不需要接口文件。那么它是用来干什么的呢?
Java中的接口是一种抽象。你只能在派生其他类时使用它。你不需要声明任何方法。
如果你有一个这样的界面:
public interface MyInterface {
int setInt(int davs); // this should probably return void
int getInt();
}
你在一个类中实现它,像这样:
public class APIClass implements MyInterface {
private int da;
public int setInt(int davs) {
// return da; <- this doesn't make a whole lot of sense
da = davs; // I assume you meant this
return da; // usually you don't return anything from a setter
}
public int getInt() {
return dada;
}
}
另一个类是这样的:
public class SecondAPIClass implements MyInterface {
private int dada = 0;
public int setInt(int davs) { // note that you have to keep the same method signiture in all derived classes
dada = davs + 5;
return dada;
}
public int getInt() {
return da;
}
}
可以使用接口将两者分组。这是面向对象设计的一个重要部分。它的有用性可能太长了,无法用一个简单的StackOverflow问题来解释,但是这里有一个简单的例子来说明它的有用性:
import java.util.ArrayList;
public static void main(String[] args)
{
APIClass first = new APIClass();
SecondAPIClass second = new SecondAPIClass();
first.setInt(20);
second.setInt(20);
ArrayList<MyInterface> list = new ArrayList<MyInterface>();
list.add(first);
list.add(second);
for(MyInterface item : list) {
System.out.println(item.getInt());
}
}
输出应该是这样的:
20
25
这个例子可能更有帮助:
假设你有几辆车。所有的交通工具都可以驾驶,但驾驶船只不同于驾驶汽车或直升机。这就是接口有用的地方。您可以声明Vehicle
应该做什么,而不需要指示它应该如何做。
public interface Vehicle {
void drive();
}
所以当你在一类Car
中推导它时,你可以声明你希望这辆车如何驾驶。
public class Car implements Vehicle {
void drive() {
// drive like a car
}
}
现在船是交通工具,它们也可以开车,但是开车和开车有很大的不同。
public class Boat implements Vehicle {
public void drive() {
// drive like a boat
}
}
总之,当你有一个抽象的概念时,接口是有用的,你知道派生对象应该做什么,但不能规定它们如何做。