所以我通过大量资源在线查看了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);"它告诉我要使方法静态。如果我将其设置为静态,则该方法需要在界面中匹配它。但是,我无法在界面中使用静态方法?
感谢任何帮助,感谢您抽出时间阅读我的问题。
答案 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
这意味着Cat
是Animal
而Dog
也是Animal
,因此您可以传递Cat
或Dog
个对象到一个带Animal
个参数的函数。
它类似于继承,但由于在Java中一个类只能从另一个类继承,所以可以使用Interfaces来解决这个问题。您只在接口中声明方法;你必须在实现它的类中定义它们。
它也可以用于ActionListeners
或MouseListeners
之类的内容。你可以有一个实现它的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;
}