ArrayListを拡張する子クラスを作成することは可能ですか?もしそうなら、どのように?
Javaでfinalでないクラスを拡張できます。とはいえ、true is-a関係がない場合は、継承を避ける必要があります。再利用のために構成を検討してください。 リスコフ置換原理 について読む
はい、できます。
public class MyArrayList<E> extends ArrayList<E>
{
}
しかし、なぜこれをしたいのかはわかりません。
他の多くの人が言ったように、はい、クラスArrayList
を拡張できますが、通常は行うべきではありません。 Javaのグッドプラクティスとは見なされません。
私は主にJavaプログラマですが、過去数か月はC#コードにも取り組んでいます。必要であれば標準コレクションクラスを拡張するC#の一般的なイディオムのようです特定の型のコレクション(それが一般的な一般的なイディオムかどうかは実際にはわかりません-少なくとも、私が作業しているコードを書いた人は常にこれを行っています)。
したがって、クラスPerson
があり、個人のリストが必要な場合は、C#の_ArrayList<Person>
_に相当するクラスを拡張するクラスPersonList
を作成します。
Java)の一般的なイディオムは、Person
オブジェクトのリストが必要な場合に_ArrayList<Person>
_を使用し、このための特定のサブクラスを作成しない場合です。
一般的なJava物事のやり方に固執し、ArrayList
または他のコレクションクラスの独自のサブクラスを作成しないことをお勧めします。
ArrayListはfinalクラスではなく、パブリックコンストラクターを提供するため、技術的には拡張可能です。
しかし、ベストプラクティスは拡張ではなくdelegateです。参照: 装飾パターン
他の人が言ったように、Java langデータ構造を拡張することは非常に悪い考えです。ただし、コレクションクラスで分離したいロジックがある場合は、以下のソリューションをお勧めします。
public class ProductCollection{
ArrayList<Product> products;
public Product getByCode(String code) {
// ... your logic goes here.
}
}
試してみてください。クラスはfinalではなく、コンストラクターはpublicなので、できます。ただし、初心者にはおそらく良い考えではありません。
ほとんどの場合、それは誰にとっても良い考えではありません。いくつかの機能を追加してExtList1 extends ArrayList
。あなたの大学は異なる独立した機能を追加するので、ExtList2 extends ArrayList
。今、あなたはそれらの両方を一度に欲しいので、あなたは運が悪いです。
または、異なるベースリストの実装で同じ機能が必要です(LinkedList
かもしれませんが、使用するのは事実上常に間違っています)。再び、運が悪い。
これらはすべて、委任が勝った場合です。 誰かがすでにベースを作成している の場合、より冗長である必要はありません。
まさにこれを行う非常に正当な理由があった場合、私はArrayList
からのみ継承します。たぶん、適切なJMHベンチマークに基づくいくつかの極端なパフォーマンス要件。