インタフェースは、インタフェースを継承することができます。抽象クラスは、特定のクラスを継承できる抽象クラスをインターフェイス(実装)を実装することができます。あなたは抽象クラスの静的なmainメソッドを持つことができます。
Q:抽象クラスは継承エンティティクラス(具象クラス)であります
A:抽象クラスは、エンティティクラスを継承することができますが、エンティティクラスは、明示的なコンストラクタを持たなければならない場合に限ります。
答えは明らかですが、それは継承することができます。実際には、そのエンティティオブジェクトクラスからのJava APIのドキュメント、抽象クラス内の各エントリは明らかに直接的または間接的にObjectから継承され、書かれているので、これは間違いありません。
答えの重要な嘘は言った、それが何を意味するのか、一つの「エンティティ・クラスが明示的なコンストラクタを持たなければならないものとします」。
簡単なテストコードは、学習者が記述します一般的です。
クラスA {}
抽象クラスBが延びます{}
完全に正常な結果でコンパイル。何の関係も「エンティティ・クラスが明示的なコンストラクタを持っていてはいけない」そうです。
この問題は、2つの基礎が含まれます。
1.クラスのすべてのコンストラクタを持っている必要がありますが、コード内のコンストラクタを宣言しない場合、システムが自動的に引数のないpublicコンストラクタを生成与えます。そして、限り、あなたは人参人参、プライベート、パブリックの有無にかかわらず、コンストラクタを宣言して、システムを使用すると、デフォルトの引数なしのコンストラクタを生成する助けにはなりません。
2.すべてのサブクラスはコンストラクタは、コードの1行目に、親クラスのコンストラクタを呼び出す書かれていない場合は、システムのデフォルト値は、引数なしで親クラスのコンストラクタを呼び出すために必要です。
この方法はまた、列挙されたデフォルトに割り当てられている場合したがって、クラスA {}のコードは、実際には
クラスA {
パブリックA(){}
}
それは、時間の連続をB
抽象クラスBが延びます{
パブリックB(){
スーパー();
}
}
この場合には、連続の内部規則をテストするには、簡単なテストコードの先頭に、また非常に簡単ですが、プラスプライベートコンストラクタは、パラメータが行う一切言及がありません。
クラスA {
プライベートA(){}
}
(1)基本的に述べたように、この時間は、このように、システムは、super()を呼び出すために(2)規則に従ってあなたの引数なしのコンストラクタデフォルトコンストラクタBを与えるものではありませんが、引数にコンストラクタAを見つけることはできません装置は、抽象クラスBで得られたことは{}コンパイルされないに延びています。(この時点クラスは内部でのみ使用すること継承と呼ばれるサブクラスのコンストラクタが存在するため、実際には、私は、Eclipseのバージョン3.4を使用して名前を変更したBに提案しますが、それは、この問題を解決することはできません。)
さて、あなたは「明示的なコンストラクタを持たなければならないエンティティクラス」のあいまいなフレーズに情報を理解する必要がありますを意味します。
1.私は、デフォルトの引数なしのパブリックコンストラクタサブクラスは何も書き込むことはできませんので、デフォルトコンストラクタはそれを呼び出すようにすることです、コンストラクタを書いていません。これは、最初のケース2行のコードです。
2.アクセス引数なしのコンストラクタサブクラスを書いて、それは同じですが、サブクラスはデフォルトのメカニズムと呼ばれるものを書き込むことはできません。
コンストラクタのパラメータを書く3.ても何のライトを持っていない、親クラスの引数のコンストラクタは、サブクラスは引数なしでコンストラクタにアクセスすることができません、サブクラスがサブクラスのコンストラクタ内の最初の文に記載されている必要があり、親クラスを呼び出しますそこにコンストラクタのパラメータ、およびそれに渡されたパラメータ。
4.最後の文と、すべてのクラスのコンストラクタは、アクセス権を継承することはできませんサブクラスの範囲内ではありません
実際には、限り、クラスが継承されるように、抽象的または実体かどうか、このルールを満たすために必要とされます。連続していつでもこのトライアルまたは接頭辞抽象的に削除され、結果は変わりませんでした。個人的に私は本当にはっきりとこのような状況を表現することはできません一つの「エンティティ・クラスが明示的なコンストラクタを持たなければならない」と感じ、その求職者の大半は、より一層明確に優れて書きます。
私は言葉遣いが好き「継承することができますが、後継者エンティティと同じクラスには、また、親クラスが継承と呼ばれ、サブクラスのコンストラクタへのアクセス権を持っています。」
あなたは抽象クラスの静的なmainメソッドを持つことができます。
パブリック抽象クラスTest14 { パブリック静的無効メイン(文字列[] args){ するSystem.out.println( "ABC"); } }
業績:ABC
あなたはTest14が抽象クラスを定義しますが、このプログラムは、実行することができます。しかし、あなたは何の抽象メソッド、あなたが実際に非抽象、彼らはあなたが(抽象メソッドfangfaを定義した場合)、実行し、mainメソッドに()この抽象メソッドfangfaを使用することができますクラスが存在しないクラスにすることはできません私が使用しています。
abstract修飾子
抽象クラス:
抽象クラスは、オブジェクトをインスタンス化するために使用することはできません、抽象クラスの声明の唯一の目的は、将来の拡張のためのクラスです。
クラスは、抽象的で、最終的な変更することはできません。クラスは抽象メソッドが含まれている場合は、クラスがそれ以外の場合は、コンパイルエラーが発生します、抽象クラスとして宣言する必要があります。
抽象クラスは非抽象メソッドと抽象メソッドが含まれていてもよいです。
抽象メソッド
抽象ない方法は、実装方法、サブクラスによって提供される方法の特定の実装ではありません。
抽象メソッドは、finalまたはstaticとして宣言することはできません。
任意のサブクラスでは、サブクラスも抽象クラスでない限り、実装しなければならない親クラスのすべての抽象クラスの抽象メソッドを継承します。
クラスは抽象メソッドの数が含まれている場合、クラスは抽象クラスとして宣言する必要があります。抽象クラスは、抽象メソッドを含めることはできません。
抽象メソッド宣言は、例えば、セミコロンで終了:パブリック抽象サンプルを() 。