Tenho uma classe abstrata Professor e 2 por via de herança, como faço pra botar estas duas em uma arraylist sendo que a Professor é abstrata ?
algo do tipo?
ArrayList<? extends Professor> a ;
Num sei se isso foi uma pergunta ou uma solução, mas explicando melhor:
Tenho a classe CadastroProfessor
Que vai ficar a arraylist
nesta array tenho que ter os objetos que instanciam as classes:
Professor extends ProfessorIntegral e Professor extends ProfessorHorista
Fiz prova disso, naum consegui fazer e to curioso pra saber como se faz
Exemplo basico
import java.util.ArrayList;
public class Try {
public static void main(String[] args) {
ArrayList<A> list = new ArrayList<A>();
Try t = new Try();
list.add(t.new B());
list.add(t.new C());
}
private abstract class A {
}
private class B extends A {
}
private class C extends A {
}
}
Você quis dizer :
ProfessorIntegral extends Professor e ProfessorHorista extends Professor
certo? Ou você está procurando por herança multipla?
Isso mesmo, 2 classes distinta, mas 2 heranças da mesma classe professor, tentarei usar o exemplo que o amigo postou
Jovem, seria no caso ProfessorX extends Professor
ProfessorY extends Professor
ai meu jovem os metodos abstratos q estao no Professor tem q ser implementados nos seus “filhos”
se nao o ProfessorX e o ProfessorY
agora no CadastroProfessor
vc vai criar uma lista mas eh o seguinte, vc n pode fazer uma lista generica de professor e passar o outros professores para ela, pq Professorx eh um Professor, mas Professorx n eh Professory, intão minha dica e fazer uma lista para cada tipo de professor, e tratalas separadamente. uma outra opçao eh vc fazer uma lista de cada um e jogar em uma lista generia professor, nesse caso vc pode, mas ai, quando vc for usar a msma, por exemplo um for, vc soh vai poder usar parametros que o professor tem, e nao os parametros diferentes implementados em x ou y
espero q eu tenha t ajudado em algo flws
No meu exemplo estou usando classes internas mas é façil mudar.
[quote=Pedro Java]Jovem, seria no caso ProfessorX extends Professor
ProfessorY extends Professor
ai meu jovem os metodos abstratos q estao no Professor tem q ser implementados nos seus “filhos”
se nao o ProfessorX e o ProfessorY
agora no CadastroProfessor
vc vai criar uma lista mas eh o seguinte, vc n pode fazer uma lista generica de professor e passar o outros professores para ela, pq Professorx eh um Professor, mas Professorx n eh Professory, intão minha dica e fazer uma lista para cada tipo de professor, e tratalas separadamente. uma outra opçao eh vc fazer uma lista de cada um e jogar em uma lista generia professor, nesse caso vc pode, mas ai, quando vc for usar a msma, por exemplo um for, vc soh vai poder usar parametros que o professor tem, e nao os parametros diferentes implementados em x ou y
espero q eu tenha t ajudado em algo flws[/quote]
Só um exemplo do que ele quer explicar:
import java.util.ArrayList;
public class Try {
public static void main(String[] args) {
Try t = new Try();
ArrayList<Professor> list = new ArrayList<Professor>();
Professor b = t.new ProfY();
Professor c = t.new ProfX();
list.add(b);
list.add(c);
for(Professor temp : list)
System.out.println(temp.materia());
//Sabemos que a posição 0 pertence à um ProfY
//Mas a lista armazena professores então só os metodos de professores podem ser chamados
//list.get(0).getS(); Não funciona pois getS é um metodo do ProfY e não Professor
//Podemos fazer um cast para acessar o metodo
System.out.println(((ProfY)list.get(0)).getS());
System.out.println(((ProfX)list.get(1)).getK());
}
private abstract class Professor {
//Metodo abstrato to
abstract String materia();
}
private class ProfY extends Professor {
//Implementação de to
@Override
String materia() {
return "Matematica";
}
//Metodo de B
String getS(){
return "Only method for B";
}
}
private class ProfX extends Professor {
//Implementação de to
@Override
String materia() {
return "Inglês";
}
//Metodo de C
String getK(){
return "Only method for C";
}
}
}
Obrigado pela ajuda pessoal