0

Interface vs Abstract Classesという質問と受け入れられた回答に刺激されて、より詳細で明確な回答が欲しいです。特に、「インターフェイスのフィールドは暗黙的に静的で最終的なものである」というステートメントを理解できません。メソッド foo() を含むインターフェースを実装するクラス A は、メソッドを として呼び出すことができるということA.foo()ですか?

final について: インターフェースにメソッドのみが含まれている限り、メソッドを持つインターフェースを実装する抽象クラス A とを拡張foo()する通常のクラスが与えられた場合、foo メソッドをオーバーライドすることはできませんか? 私の知る限り、最終的なメソッドをオーバーライドすることは不可能です。結局何が真実? 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() として呼び出すことができるということですか?

フィールドとメソッドはどちらもメンバーですが、メソッドとフィールドは同じものではありません。

staticインターフェース内のメソッドはまたはにすることはできませんがfinal、暗黙的に public および abstract です

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

インターフェイスではすべて同じです。

私の知る限り、最終的なメソッドをオーバーライドすることは不可能です

最終インスタンス メソッドはオーバーライドできず、最終静的メソッドは非表示にできません。

同様に、ネストされたインターフェース、クラス、および注釈は public および static です。ネストされたインターフェースと注釈も暗黙のうちに抽象的です。

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

これを見てみてください。

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

「インターフェースのフィールドは...」

フィールドの話です。フィールドはメソッドではありません。

于 2012-08-31T13:39:01.570 に答える
0

メソッド foo() を含むインターフェースを実装するクラス A は、メソッドを A.foo() として呼び出すことができるということですか?

いいえ、Awithのインスタンスを作成してから、そのインスタンスnewに実装する必要があり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?

インターフェイス メソッドを final にすることはできないため、この質問は意味がありません。インターフェイスを実装する抽象クラスのサブクラスは、インターフェイス メソッドの独自の実装を提供できます。

于 2012-08-31T13:40:39.330 に答える
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;
  }

interface の Member 関数の場合。

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.

メソッドはインターフェイスで Final ではないことを意味します。

詳細については、このチュートリアルを参照してください

于 2012-08-31T13:46:00.947 に答える