Problema 18

class Periferice{}

class Tastatura extends Periferice{}

class Difuzor extends Periferice{}

class Ecran extends Periferice{}

class Scanner extends Periferice{}

class Elemente{

private ArrayList<Periferice>periferice=new ArrayList<Periferice>();

public void add(Tastatura t){

periferice.add(t);

}

public void add(Ecran e){

periferice.add(e);

}

public void add(Difuzor d){

periferice.add(d);

}

public void add(Scanner t){

periferice.add(t);

}

public void add(Periferice p){

periferice.add(p);

}

}

Putem adauga metoda "add(Scanner t)"....

Insa pentru a nu avea nevoie de atat de multe metode de tip "add", putem crea o clasa "Periferice" care sa fie superclasa pentru "Tastatura, Difuzor, Ecran, Scanner". Astfel am avea nevoie doar de metoda "add(Periferice p)" si nu ar mai fi nevoie si de celelalte metode de tip "add".

Pe acelasi principiu, daca nu avem voie sa facem nicio modificare asupra clasei "Elemente", ceea ce putem face este ca si clasa "Scanner" sa mosteneasca una din clasele "Tastatura, Difuzor, Ecran".

Sau....folosind genericitate

class Periferice{}

class Tastatura extends Periferice{}

class Difuzor extends Periferice{}

class Ecran extends Periferice{}

class Scanner extends Periferice{}

class Elemente<T extends Periferice>{

private ArrayList<T>periferice=new ArrayList<>();

public void add(T t){

this.periferice.add(t);

}

}