1

于是我上网查了一些资源来了解Java接口。我相信我对它们有一个很好的总体了解,但是在对它们进行编程时我有点困惑......

我创建了一个名为 A 的接口,里面有以下内容......

    public interface A {
    public int sum(int first, int second);
}

然后我创建了一个名为 B 的类。

public class B implements A {

    public static void main(String [] args){
        int result = sum(3, 5);
    }

    public int sum(int first, int second) {
        int total = first + second;
        return total;
    }

}

现在我想弄清楚的是如何正确调用/使用方法“sum”。在 Eclipse 中,“int result = sum(3, 5);”行出现错误 它告诉我将方法设为静态。如果我将其设为静态,则该方法需要在接口中匹配它。但是,我不能在接口中使用静态方法?

感谢您提供任何帮助,并感谢您花时间阅读我的问题。

4

7 回答 7

5

您遇到的问题不是接口而是static方法。

main是一种static方法。这意味着它不链接到对象/实例,而是链接到类本身。

由于要使用sum实例方法,因此首先需要创建一个对象来调用其方法。

A a = new B();
int result = a.sum(5, 6);

通常,实例方法更多地与对象状态相关联,而静态方法更像是非 OO 语言中的“过程”。在 的情况下sum,您的方法作为静态方法会更有意义。但是,如果您使用B包装一个值(状态),并使用 sum 添加到您的内部状态,这将结束(以更 OO 友好的方式)。

A a = new B(5);
a.sum(6);
int result = a.getValue();

请注意,这两种方法都是有效的,并且都在 Java 中编译,只是选择在每种情况下更有意义的修饰符。

于 2013-01-29T23:49:20.207 回答
2

您不能sum()从您的 main 方法调用,因为 sum 是一个实例方法,而不是静态方法。它需要从类的实例中调用。

您需要实例化您的类:

public static void main(String [] args) {
    B b = new B();
    int result = b.sum(3, 5);
}
于 2013-01-29T23:49:14.087 回答
1
public class B implements A {

    public static void main(String [] args){
        int result = new B.sum(3, 5); 
        // Create an instance of B so you can access 
        // the non-static method from a static reference
        // Or if you want to see the power of the interface...
        A a = new B();
        int result = a.sum(3, 5); 
    }

    public int sum(int first, int second) {
        int total = first + second;
        return total;
    }

}
于 2013-01-29T23:49:19.660 回答
1

通过像这样创建 B 的实例:

A a =  new B();
    int result = a.sum(3, 5);
于 2013-01-29T23:49:20.477 回答
0

这是静态的问题,而不是界面的问题。您不能从静态方法调用非静态方法。您可以通过创建 sum 对象来调用 sum 方法。

像,

int result = new B.sum(3, 5);

内部静态方法。

于 2013-01-31T01:46:29.620 回答
0

我将通过举另一个例子来说明这一点:

制作一个名为 Animal 的分类。

public interface Animal {
  String speak();
}

现在创建一个名为 Cat 的类

public class Cat implements Animal {
  public String speak() {
    return "meow"
  }
}

还有一个名为 Dog 的类

public class Dog implements Animal {
  public String speak() {
    return "woof"
  }
}

现在你可以这样做

public String speak(Animal a) {
  System.out.printf("%s\n", a.speak());
}

Cat cat = new Animal();
Dog dog = new Animal();
speak(cat); //prints meow
speak(dog); //prints woof

这意味着Catis anAnimal并且Dogis an Animaltoo,因此您可以将 aCatDogobject 传递给接受Animal参数的函数。

这就像继承,但由于在 Java 中一个类只能从另一个类继承,您可以使用接口来解决这个问题。您只在接口中声明方法;您必须在实现它的类中定义它们。

它也可以用于诸如ActionListeners或之类的东西MouseListeners。你可以有一个实现它的 GUI 类,然后有一个函数来处理你ActionEvents喜欢的按钮点击和鼠标点击。

于 2015-08-29T15:02:41.303 回答
0

问题似乎很简单,要么将 sum 方法设为静态,要么创建 B 类的实例并使用它来调用 sum 方法:

B b=new B();
int result=b.sum(3,5);

或者

只需在 sum 方法之前写 static

例如:

 public static  int sum(int first, int second)

 {

     int total = first + second;
     return total;

 }
于 2015-08-29T16:33:41.250 回答