Boa noite amigos, sou novo no fórum e em java, e estou com uma dúvida quanto a instanciação, fiz um programa simples onde recebe dados de um funcionário(superclasse) e posteriormente recebe dados de um professor do ensino médio ou ensino infantil(subclasses), utilizei para isto um vetor de classes, sendo isso dito, na hora de criar o programa utilizei o segundo código na main.
Scanner read = new Scanner(System.in);
Funcionario[] func = new ProfessorEM[99];
System.out.print("1-EM 2-EI");
escolha = read.nextInt();
while(escolha != 99){
x++;
System.out.print("Funcionario...");
System.out.print("Digite o nome do funcionario: ");
String nome = read.next();
System.out.print("Digite a matricula do funcionario: ");
int matricula = read.nextInt();
System.out.print("Digite o endereco do funcionario: ");
String endereco = read.next();
if(escolha == 1){
System.out.print("ProfessorEM...");
System.out.print("Digite o valor da hora: ");
float valorHora = read.nextFloat();
System.out.print("Digite as aulas semanais: ");
int aulasSemanais = read.nextInt();
func[x] = new ProfessorEM(nome,endereco,matricula,valorHora,aulasSemanais);
}
else{
System.out.print("ProfessorEI...");
System.out.print("Digite o salario base: ");
float salarioBase = read.nextFloat();
}
System.out.print("1-EM 2-EI");
escolha = read.nextInt();
System.out.print(func[x]);
System.out.print(func[0]);
}
}
}
minha duvida é a seguinte , na parte Funcionario[] func = new ProfessorEM[99]; , funcionou de varias maneiras diferentes como ProfessorEM[] func = new ProfessorEM[99]; como tambem Funcionario[] func = new Funcionario[99]; , gostaria de saber qual a diferença entre elas, e qual a maneira mais correta nessa caso, gostaria também de uma explicação detalhada dessa linha de instanciação, corrijam-me se estiver errado, o primeiro nome é o tipo a ser instanciado,o segundo é a variável que guardará o endereço de memória apontando pro objeto a ser instanciado, o new realiza a instanciaçao e a ultima palavra é a classe a ser instanciada. Obrigado