JavaRush /Java Blog /Random-JA /質問と回答: 最終クラスで抽象メソッドを定義することは可能ですか?

質問と回答: 最終クラスで抽象メソッドを定義することは可能ですか?

Random-JA グループに公開済み
この興味深く重要な質問は、Java 開発者のポジションの電話面接中に読者の 1 人に尋ねられました。彼はJava 言語で抽象クラスを作成することfinalが不可能であることを知っていましたが、質問の文言に混乱しました。答えは簡単です。いいえ、 final-class 内に抽象メソッドを含めることはできません。なぜ?Java 言語クラスで抽象メソッドを宣言すると、そのクラスは自動的に抽象クラスになるため、finalJava 言語で抽象クラスを作成することはできません。これは、Java クラスに抽象メソッドをfinal含めることはできないこと を意味します。
質問と回答: 最終クラスで抽象メソッドを定義することは可能ですか?  - 1
多くの Java 開発者は、この質問に答えるときに言葉遣いのせいで混乱してしまいます。たとえ質問者が一般的な概念に精通していても、クラス内で抽象メソッドを宣言するとクラスが抽象になり、Java では抽象クラスを作成できないことを理解していない可能性がありますfinal。この点が、この質問と、より一般的で頻繁に寄せられる質問、つまりJava では、クラスを抽象クラスと最終クラスとして同時に宣言することは可能ですか? とは区別されます。final-class で抽象メソッドを宣言できないことを 示すコード例を見てみましょう。抽象メソッドを持つ という名前のクラスHello.javaを作成しましょう。 public finalHelloprint()
public final class Hello {
  public abstract void print();
}
このコードを IDE に入力すると、次のエラー メッセージが表示されます。Hello抽象メソッドを宣言できるようにするには、このコードを抽象クラスにする必要があると言われます。
質問と回答: 最終クラスで抽象メソッドを定義することは可能ですか?  - 2
質問と回答: 最終クラスで抽象メソッドを定義することは可能ですか?  - 3
このコードをメモ帳に入力し、コマンド ラインから javac ユーティリティを使用してコンパイルした場合も、同じことが起こります。Javaの仕様では、クラス内で抽象メソッドを宣言するとそのクラスは抽象クラスとなり、finalJavaでは抽象クラスを作ることができないため、コンパイラでエラーが発生します。これは、Java 言語の最上位クラスとネストされたクラスの両方に当てはまります。ネストされた -class 内で抽象メソッドを宣言した場合でもfinal、エラーは同じになります。関連するもう 1 つの質問は、Java の抽象クラスに静的メソッドを含めることができるかということです。 回答:はい、可能です。静的メソッドを使用するためにクラスのインスタンスを作成する必要がなく、クラス名を使用するだけで呼び出すことができるため、抽象クラスで静的メソッドを宣言することに問題はありません。以下に示すように、 この例を変更して、Java では静的なHelloメソッドをclass に含めることができます。main()
public abstract class Hello {
  public abstract void print();
  public static void main(String args[]) {
     // Howой-то code
  }
}
ご覧のとおり、コンパイル エラーはスローされません。Java では抽象クラスで静的メソッドを完全に安全に宣言できるため、このコードは問題なくコンパイルされます。 簡単な結論-class で抽象メソッドを宣言することは不可能ですfinal。これを行うと、Java 仕様に従って、クラスは自動的に抽象になるためです。また、finalJava の -class は抽象化できないため、これは受け入れられず、コンパイラはエラーをスローしてこれを禁止します。ただし、静的メソッドは最終クラスと抽象クラスの両方で宣言できます。これについては問題ありません。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION