2

抽象クラスへの参照を返す 2 つの関数宣言に出くわしたとき、私は Hadoop のドキュメントを読んでいました。

public FSDataInputStream open(Path f) throws IOException
public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException

パラメータの違いは別として、これら 2 つの関数の戻り値の型が異なるのはなぜabstractですか。一方は明示的に宣言され、他方はそうではありません。

ありがとう。

4

7 に答える 7

6

元の質問にも答えますabstractが、戻り値の型の一部ではなく、メソッド自体の修飾子ですpublic。2 つのメソッドの戻り値の型は同じです。

于 2012-07-13T17:48:04.403 に答える
6

抽象メソッドは宣言されていますが、実装はありません。サブクラスはそれらを実装することを余儀なくされ、スーパークラスに実装されていないため継承できません。

于 2012-07-13T17:45:32.347 に答える
5

が定義されているクラスpublic abstract FSDataInputStream open(Path f, int bufferSize) throws IOExceptionは、それ自体抽象です。これは、クラスが実装ではなくメソッドの宣言を提供したことを意味します。

もう 1 つは、次のいずれかです。

  • インターフェイスで宣言されている場合、メソッドが再び抽象宣言であることを示唆します。

  • または、具象クラスの一部である可能性があり、そこに実装があることを示唆しています。

于 2012-07-13T17:47:11.883 に答える
3

抽象メソッドを実装する必要があります。この場合、サブクラスが何であるかを知らずに正確な理由は明確ではありませんが、これが含まれているクラス/インターフェースをサブクラス化する場合、最初のメソッドをすぐに使用できますが、2 番目のメソッドを実装する必要があります。

于 2012-07-13T17:47:35.050 に答える
3

ドキュメントによる

抽象メソッドは、次のように、実装なしで (中かっこなしで、その後にセミコロンが続く) 宣言されるメソッドです。

abstract void moveTo(double deltaX, double deltaY);
 If a class includes abstract methods, the class itself must be declared abstract, as in:

public abstract class GraphicObject {
   // declare fields
   // declare non-abstract methods
   abstract void draw();
}

抽象クラスがサブクラス化されると、通常、サブクラスはその親クラスのすべての抽象メソッドの実装を提供します。ただし、そうでない場合は、サブクラスも抽象宣言する必要があります。

于 2012-07-13T17:48:09.293 に答える
2
public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException

これは、抽象クラスを返すことを意味するのではなく、メソッドを宣言していることを意味しますが、その実装はまだ与えていませんabstract
これはabstractクラスで行われます。したがって、別のクラスがextend抽象クラスになり、その実装を提供します。

public FSDataInputStream open(Path f, int bufferSize) throws IOException

これは、抽象メソッドの実装を提供していることを示しています。

于 2012-07-13T17:50:54.540 に答える
2

1. public abstract FSDataInputStream open(Path f, int bufferSize) throws IOException、このメソッドは抽象メソッドであることを意味するため、実装ではなく単なる宣言です。したがって、このメソッドは、インターフェイスまたは抽象クラスのメソッドのいずれかになります。したがって、このメソッドは、Interface を実装するか、このメソッドを含むクラスを拡張する最初の Concrete サブクラスによって実装する必要があります。

2. public FSDataInputStream open(Path f) throws IOExceptionこのメソッドは、インターフェース内で宣言されている場合は抽象メソッドであり、そうでない場合は、抽象クラスまたは非抽象クラス内の非抽象メソッドです。

于 2012-07-13T17:52:20.263 に答える