Java接口类?

Java接口类?,java,api,interface,Java,Api,Interface,因此,我试图学习Java中的接口类是如何工作的,对此我感到非常困惑 我不想让它像普通类文件中的方法那样: public class APIClass { private int davs; public int setInt(int dav) { this.davs = dav; return davs; } public int getInt() { return davs; } } public i

因此,我试图学习Java中的接口类是如何工作的,对此我感到非常困惑

我不想让它像普通类文件中的方法那样:

public class APIClass {
    private int davs;

    public int setInt(int dav) {
        this.davs = dav;
        return davs;
    }

    public int getInt() {
        return davs;
    }
}
public interface MyInterface {

    public MyInterface setInt(int davs);
    public MyInterface getInt();

}
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;
    }
}
两种方法。一个是设置int DAV,另一个是获取int DAV

我不想在界面上做的事情就是这样。我在其他接口文件中看到,它们有如下内容:

public class APIClass {
    private int davs;

    public int setInt(int dav) {
        this.davs = dav;
        return davs;
    }

    public int getInt() {
        return davs;
    }
}
public interface MyInterface {

    public MyInterface setInt(int davs);
    public MyInterface getInt();

}
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;
    }
}
编辑:
我的问题是,我看不出我可以使用这个界面做什么?我所看到的就是使用它,在一个新的类文件中声明相同的方法,然后他们真的不需要接口文件。那么它是做什么用的呢?

Java中的接口是抽象的。您应该严格使用它来派生其他类。您没有在其中声明任何方法

因此,如果您有这样一个界面:

public class APIClass {
    private int davs;

    public int setInt(int dav) {
        this.davs = dav;
        return davs;
    }

    public int getInt() {
        return davs;
    }
}
public interface MyInterface {

    public MyInterface setInt(int davs);
    public MyInterface getInt();

}
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;
    }
}
您可以在这样的类中实现它:

public class APIClass {
    private int davs;

    public int setInt(int dav) {
        this.davs = dav;
        return davs;
    }

    public int getInt() {
        return davs;
    }
}
public interface MyInterface {

    public MyInterface setInt(int davs);
    public MyInterface getInt();

}
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());
     }
}
此示例可能更有帮助:

假设你有几辆车。所有车辆都可以驾驶,但驾驶船只不同于驾驶汽车或直升机。这就是接口有用的地方。您可以声明车辆应执行的操作,而无需指定车辆应如何执行

public interface Vehicle {   
        void drive();
}
所以,当你在一辆普通车上推导它时,你可以说明你想要这辆车如何驾驶

public class Car implements Vehicle {
        void drive() {
             // drive like a car
        }
}
现在船是交通工具,他们也可以驾驶,但是驾驶船和驾驶汽车有很大的不同

public class Boat implements Vehicle {
        public void drive() {
               // drive like a boat
        }
}

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

请注意,setter不应该返回值,它们只设置值。另外,请问一个问题,您只提到了事实:/为什么要将返回类型更改为MyInterface?只需使用公共int setIntint davs。您使用的是什么Java版本?Java8会得到与较低版本不同的答案。@TagirValeev通常不会,这是惯例。除非文件中另有规定,我想。。是关于“阅读”或“副作用”的一般原则,但不是两者兼而有之-获取者/设定者通常应遵守这一原则。但是也有例外,比如堆栈弹出和出列。我不明白的是,没有接口类文件它也可以工作?@CasperRasmussen No。它不会工作。注意,我创建了MyInterface的ArrayList。现在您可以有两个不同的类,它们具有不同但相似的实现。。。。我懂了。。。我试图将其复制并粘贴到我自己的文件中,但它只给了我以下信息:APIClass@659e0bfd编辑:我没有看到item.getInt