Bem estou com dúvidas em relação a downcasting em um programa que eu fiz usando poliformismo irei colocar o código para ficar mais fácil o entedimento
classe testa 1:
package com.testes.novos;
public class testa1 extends testa3
{
private double totalRecebido;
public testa1(String firstName, String lastName, String password, double salario, double comissao,double totalRcebido)
{
super(firstName, lastName, password, salario, comissao);
setTotalRecebido(totalRecebido);
}
public void setTotalRecebido(double totalRecebido)
{
this.totalRecebido=(super.getComissao()+super.getSalario());
}
public String toString()
{
return("Este objeto referencia a subclasse"+"\n"+"Nome:"+super.getFirstName()+"\n"+
"Sobrenome: "+super.getlastName()+"\n"+"Senha: "+super.getPassword()+"\n"
+"Salário: "+super.getSalario()+"\n"+"Comissão "+super.getComissao()+"\n"+
"O total recebido é "+totalRecebido);
}
}
classe testa 2:
package com.testes.novos;
public class testa2
{
public static void main(String args[])
{
// atribui uma referencia de super classe a variavel de superclasse
testa3 chama = new testa3("Edson","Catugy","81345800786",500.00,54);
// atribui uma referência de subclasse a variável de subclasse
testa1 chama1= new testa1("Marcos","Lace","48118712647",450.0,1002,123);
// invoca toString no objeto de superclasse utilizando a variável de superclasse
System.out.println(chama.toString());
System.out.println();
// invoca toString no objeto de subclasse utilizando a variável de subclasse
System.out.println(chama1.toString());
testa3 chamaSub = chama1;
System.out.println();
// invoca toString no objeto de subclasse utilizando a variável de superclasse
System.out.println(chama1.toString());
}
}
classe testa 3:
package com.testes.novos;
public class testa3
{
private String firstName;
private String lastName;
private String password;
private double salario;
private double comisao;
public testa3(String firstName,String lastName,String password,double salario,double comissao)
{
this.firstName=firstName;
this.lastName=lastName;
this.password=password;
setSalario(salario);
setComissao(comissao);
}
public void setSalario(double salario)
{
this.salario=((salario<0)?0:salario);
}
public void setComissao(double comissao)
{
this.comisao=((comissao<0)?0:comissao);
}
public String getFirstName()
{
return firstName;
}
public String getlastName()
{
return lastName;
}
public String getPassword()
{
return password;
}
public double getSalario()
{
return salario;
}
public double getComissao()
{
return comisao;
}
public String toString()
{
return("Este objeto referencia a super classe "+"\n"+"Nome: "+firstName+"\n"+
"Sobrenome: "+lastName+"\n"+"Senha: "+password+"\n"+"Sálario: "+salario+
"\n"+"Comissão: "+comisao);
}
}
Bem nesta parte do programa eu fiz downcasting, “testa3 chamaSub = chama1;”, passando a referencia da subclasse para minha referência da superclasse, mais quando eu faço isso eu so posso usar métodos da minha subclasse? porque não posso usar tanto da superclasse quanto da subclasse.???