Java interface classes?



所以,我试图学习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
        }
}

总之,当你有一个抽象的概念时,接口是有用的,你知道派生对象应该做什么,但不能规定它们如何做。

最新更新