Ola alguem pode me falar um pouco sobrescrita alguns exemplos e suas vantagens
Cara, tem vários tópicos falando sobre isso.
Mas , sobrescrita de métodos é mais ou menos assim
class A{
public void fazAlgo{
.......seu código....
}
}
class B extends A{
public void fazAlgo(){
....seu código.............
}
class Teste{
public static void main(String args[]){
A a = new A();
A b = new B();
a.fazAlgo(); //executa método da class A
b.fazAlgo(); //executa método da classe B
}
}
Bom dia a todos.
O conceito de sobrescrita, reside quando voce, ao fazer a herança de classes, onde as classes filhas (sub classes) herdam todos os métodos da classe pai (super classe), ao declarar o mesmo método com a mesma assinatura da classe pai na classe filha, voce está fazendo a sobrescrita desse método na classe filha, ou seja, voce está sobrescrevendo e substituindo pelo mesmo método só que possa estar com uma implementação diferente.
Vamos a exemplo prático pegando carona no exemplo do nosso amigo.
public class A {
public void fazAlgo() {
System.out.println("Este é o método fazAlgo da classe A (Classe Pai)");
}
}
public class B extends A {
@Override
public void fazAlgo() {
System.out.println("Este é o método sobrescrito fazAlgo da classe B (Classe Filha)");
}
}
public static void main(String args[]) {
A a = new A();
a.fazAlgo(); // Retorna "Este é o método fazAlgo da classe A (Classe Pai)"
B b = new B();
b.fazAlgo(); // Retorna "Este é o método sobrescrito fazAlgo da classe B (Classe Filha)";
}
Repare que a instância b que foi tipada como sendo da Classe B, executa a implementação do novo método que foi sobrescrito na mesma, ou seja, substituiu o método falAlgo() da classe Pai “A”, agora vamos ao exemplo.
Quanto a sintaxe “@Override” que siginfica sobrescrever, nada mais é que uma diretiva que avisa ao compilador Javac para diferenciar com o mesmo método da classe pai, e que o método logo abaixo de sua linha é que deve ser o substituto.
public class A {
public void fazAlgo() {
System.out.println("Este é o método fazAlgo da classe A (Classe Pai)");
}
}
public class B extends A {
public void fazAlgoAindaMelhor() {
System.out.println("Este é o método fazAlgoAindaMelhor da classe B (Classe Filha)");
}
}
public static void main(String args[]) {
A a = new A();
a.fazAlgo(); // Retorna "Este é o método fazAlgo da classe A (Classe Pai)"
B b = new B();
b.fazAlgo(); // Retorna "Este é o método fazAlgo da classe A (Classe Pai)"
b.fazAlgoAindaMelhor(); // Retorna "Este é o método fazAlgoAindaMelhor da classe B (Classe Filha)"
}
Repare agora que o método fazAlgo(), não foi sobrescrito na classe descendente “B”, portanto ele está herdando o método fazAlgo() da classe “A” e vai executar a mesma implementação, tanto na instância da classe “A” quanto na “B”, o método falAlgoAindaMelhor() está com o nome diferente, e portanto ele passe a ser um novo método na classe “B”.
Qual é a vantagem disto :?: :?: :?:
Simples, suponhamos que o método fazAlgo() da classe “A” (Classe Pai), voce queira utilizar a sua implementação em todas as classes herdadas, porém em uma determinada classe herdada, voce queira aproveitar a sua implementação acrescentando algo a mais, vamos a exemplo:
public class A {
public void fazAlgo() {
System.out.println("Esta é execução fazAlgo da classe A (Classe Pai)");
}
}
public class B extends A {
private Integer a = 5, b = 10;
@Override
public void fazAlgo() {
super.falAlgo(); // Executa a implementação do método fazAlgo() da classe "A" (Classe Pai)
System.out.println("Esta é a execução fazAlgo da classe B (Classe Filha)");
System.out.println(a + b);
}
}
public static void main(String args[]) {
A a = new A();
a.fazAlgo(); // Retorna "Esta é a execução fazAlgo da classe A (Classe Pai)"
B b = new B();
b.fazAlgo(); /* Retorna "Esta é a execução fazAlgo da classe A (Classe Pai)
Esta é a execução fazAlgo da classe B (Classe Filha)
15" */
}
Cappichi.
[quote=wesleysilva]Ola alguem pode me falar um pouco sobrescrita alguns exemplos e suas vantagens[/quote]Procure entender primeiro, polimorfismo. Seu uso está, em geral, atrelado a isso.
PS: Isso me cheira a trabalho escolar…