0

受问题Interface vs Abstract Classes和接受的答案的刺激,我想有一个更详细和澄清的答案。特别是我无法理解“接口中的字段是隐式静态和最终的”语句。这是否意味着实现包含方法 foo() 的接口的类 A 可以调用该方法A.foo()

关于final:只要接口只包含方法,给定一个抽象类A,它实现一个带有方法的接口和一个扩展的foo()普通类,不能覆盖foo方法吗?就我而言, final 方法是不可能被覆盖的。最后什么是真的? class Babstract class Aclass B

4

5 回答 5

7

“接口中的字段是隐式静态和最终的”。

在一个界面写作中

int N = 1;
public int N = 1;
static int N = 1;
public static int N = 1;
// also
final int N = 1;
public final int N = 1;
static final int N = 1;
public static final int N = 1;

都是一样的。

这是否意味着实现包含方法 foo() 的接口的类 A 可以调用该方法作为 A.foo()

字段和方法都是成员,但方法和字段不是一回事。

接口中的方法不能是staticor final,而是隐式公共和抽象的

int foo();
public int foo();
abstract int foo();
public abstract int foo();

对于一个接口来说都是一样的。

就我而言,最终方法不可能被覆盖

最终实例方法不能被覆盖,最终静态方法不能被隐藏。

类似的嵌套接口、类和注解是公共的和静态的。嵌套接口和注解也是隐式抽象的。

interface A {
    public static class C { }
    public static /* final */ enum E {; }
    public static abstract interface I { }
    public static abstract @interface A { }
}
于 2012-08-31T13:39:32.217 回答
0

“接口中的字段是......”

它正在谈论领域。字段不是方法。

于 2012-08-31T13:39:01.570 回答
0

这是否意味着实现包含方法 foo() 的接口的类 A 可以调用该方法作为 A.foo()?

不,您需要创建一个 with 的实例Anew然后foo在该实例上实现。

 As long as interfaces contain only methods, given an abstract class A which implements an interface with a method foo() and an ordinary class B which extends the abstract class A, cannot the class B override the foo method? As far as I am concerned, final methods are impossible to be overridden. What is true finally?

接口方法不能是最终的,所以这个问题没有意义。实现接口的抽象类的子类可以为接口方法提供自己的实现。

于 2012-08-31T13:40:39.330 回答
0

试试看这个。

public interface A {
    int x = 4;
    public void printVal();
}

public class B implements A {

    public void printVal() {
        System.out.println(A.x);
    }

    public static void main(String [] args) {
        System.out.println(A.x);

        (new B()).printVal();
    }
}
于 2012-08-31T13:42:32.853 回答
0
Interface can only contain abstract methods, properties but we don’t
need to put abstract and public keyword. All the methods and properties
defined in Interface are by default public and abstract.

接口中的每个字段都是公共的、静态的和最终的,因为...

Interface variables are static because Java interfaces cannot be instantiated 
in their own right; the value of the variable must be assigned in a static 
context in which no instance exists. The final modifier ensures the value
assigned to the interface variable is a true constant that cannot be 
re-assigned by program code.

前任:

public interface Test
  {
    int value = 3; //it should be same as public static final int value = 3;
  }

在接口的成员函数的情况下。

A method declaration within an interface is followed by a semicolon,
but no braces, because an interface does not provide implementations
for the methods declared within it. All methods declared in an interface 
are implicitly public, so the public modifier can be omitted.

意味着方法在接口中不是最终的。

有关更多详细信息,请参阅本教程

于 2012-08-31T13:46:00.947 回答