了解Java接口?

时间:2013-01-29 23:47:02

标签: java interface

所以我通过大量资源在线查看了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;
    }

}

现在我想弄清楚的是我如何正确地调用/使用方法"总和"。在Eclipse中,我得到了一行错误" int result = sum(3,5);"它告诉我要使方法静态。如果我将其设置为静态,则该方法需要在界面中匹配它。但是,我无法在界面中使用静态方法?

感谢任何帮助,感谢您抽出时间阅读我的问题。

7 个答案:

答案 0 :(得分:5)

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

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

由于你想使用sum这是一个实例方法,你首先需要创建一个对象来调用它的方法。

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

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

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

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

答案 1 :(得分:2)

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

您需要实例化您的课程:

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

答案 2 :(得分: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;
    }

}

答案 3 :(得分:1)

通过这样创建B的实例:

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

答案 4 :(得分:0)

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

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

内部静态方法。

答案 5 :(得分: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

这意味着CatAnimalDog也是Animal,因此您可以传递CatDog个对象到一个带Animal个参数的函数。

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

它也可以用于ActionListenersMouseListeners之类的内容。你可以有一个实现它的GUI类,然后有一个函数来处理所有ActionEvents按钮点击和鼠标点击。

答案 6 :(得分:0)

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

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

只需在求和方法之前写静态

例如:

 public static  int sum(int first, int second)

 {

     int total = first + second;
     return total;

 }