Pouvez-vous étendre ArrayList en Java?
est-il possible de faire une classe d'enfant qui étend ArrayList? Si oui, comment?
6 réponses
Vous pouvez étendre une classe qui n'est pas final en Java. Cela dit, vous devriez éviter l'héritage s'il n'y a pas de true relation. Envisager de réutiliser la composition. Lisez à propos de principe de substitution de Liskov
Oui, vous pouvez.
public class MyArrayList<E> extends ArrayList<E>
{
}
cependant, je ne sais pas pourquoi vous voudriez faire cela.
Comme beaucoup d'autres l'ont dit, oui, vous pouvez étendre la classe ArrayList
, mais ce n'est pas quelque chose que vous devriez normalement faire; ce n'est pas considéré comme une bonne pratique en Java.
je suis principalement un programmeur Java, mais ces derniers mois j'ai aussi travaillé sur le code C#. Il semble que C'est un idiome commun en C# pour étendre les classes de collection standard si vous avez besoin d'une collection d'un type spécifique (Je ne sais pas en fait si c'est un idiome commun en général - au moins les gens qui ont écrit le code je suis travailler avec font cela tout le temps).
donc s'ils ont une classe Person
et ils ont besoin d'une liste de personnes, qu'ils avaient créer une classe PersonList
qui étend L'équivalent en C de ArrayList<Person>
.
l'idiome commun en Java serait juste d'utiliser ArrayList<Person>
si vous avez besoin d'une liste de Person
objets et de ne pas créer une sous-classe spécifique pour cela.
je vous conseille de vous en tenir à la façon Java courante de faire les choses, et de ne pas créer vos propres sous-classes de ArrayList
ou d'autres les classes de collection.
ArrayList n'est pas la classe finale et il fournit le constructeur public, donc techniquement il peut être étendu.
Mais la meilleure pratique est déléguer plutôt que de l'étendre. Voir: motif décorateur
il suffit de l'essayer. La classe n'est pas finale, le constructeur est public, donc vous pouvez. Cependant, il est probablement pas une bonne idée pour un débutant.
la Plupart du temps, c'est pas une bonne idée pour n'importe qui. Imaginez que vous ajoutez un peu de fonctionnalité et obtenez ExtList1 extends ArrayList
. Une de vos universités ajoute une fonctionnalité indépendante différente, donc vous avez ExtList2 extends ArrayList
. Maintenant tu les veux tous les deux en même temps et tu n'as pas de chance.
ou vous avez besoin de la même fonctionnalité avec une implémentation de liste de base différente (peut-être LinkedList
, bien qu'il soit pratiquement toujours erroné de l'utiliser). Encore une fois, hors de la chance.
ce sont tous les cas où la délégation gagne. Il n'a pas besoin d'être plus prolixe quand quelqu'un a déjà créé la base.
j'avais seulement hérite de l' ArrayList
, si il y avait une très bonne raison pour faire exactement cela. Peut-être que certains vraiment extrême exigences de performance basées sur des repères JMH appropriés.
comme d'autres l'ont dit, étendre les structures de données java lang est une très mauvaise idée. Cependant, si vous avez une certaine logique que vous voulez isoler dans une classe de collection, je suggérerais la solution de bellow:
public class ProductCollection{
ArrayList<Product> products;
public Product getByCode(String code) {
// ... your logic goes here.
}
}