Baixe o app para aproveitar ainda mais
Prévia do material em texto
Thiago Rodrigues POO 1 Sobrescrição de Métodos • Quando se define uma subclasse, freqüentemente é necessário substituir um ou mais métodos por outros mais específicos a esta subclasse; • Para sobrescrever um método herdado pela subclasse, basta criar um método com o mesmo nome e mesma lista de parâmetros; Thiago Rodrigues POO 2 Polimorfismo x Sobrescrição • Quando um método herdado é sobrescrito na classe filha, ocorre a substituição no método sobrescrito na classe descendente; package classe; //possui um método que public class JMae{ //inicializa um atributo protected int idade; public void set(int x){ this.idade = x; System.out.println(“idade:"+this.idade);} } package classe; import classe.JMae; //possui um método que public class JFilha extends JMae{ //sobrescreve o herdado e public void set(int x){ //inicializa o atributo if(x >= 0) //com um valor >= zero this.idade = x; else this.idade = 0; System.out.println("x:"+this.idade);} } Thiago Rodrigues POO 3 import classe.JMae; import classe.JFilha; public class JMain{ public static void main(String args[]){ JMae objM; objM = new JFilha(); objM.set(-1); } } setM(int x) setF(int x) JMae objM JFilha objF Método da classe JFilha Thiago Rodrigues POO 4 package classes; public class Jmae{ public void imprime(){ System.out.println(“Classe JMae”); }} import classes.Jmae; public class Jfilha extends Jmae{ public void imprime(){ System.out.println(“Classe JFilha”); }} import classes.Jmae; import classes.Jfilha; public JMain{ public static void main(String args[]){ Jmae obj = new Jmae(); obj.imprime(); obj = new Jfilha(); obj.imprime(); }} polimorfismo Thiago Rodrigues POO 5 Métodos e Classes final • Métodos especificados como final não podem ser sobrescritos; • Classes especificadas pela cláusula final não podem ser superclasses; package classes; public class Jmae{ public final void imprime(){ System.out.println(“Classe JMae”);}} import classes.Jmae; public class Jfilha extends Jmae{ public void imprime(){ System.out.println(“Classe JFilha”);}} //erro package classes; public final class Jmae{ public void imprime(){ System.out.println(“Classe JMae”);}} import classes.Jmae; public class Jfilha extends Jmae{ // erro – classe Jmae é final } Thiago Rodrigues POO 6 Herança e Construtores • Construtores não são herdados pelo mecanismo de herança; • Para uma classe ser instancializada, as classes ancestrais também devem ser instancializadas, JMae JFilha JNeta • Quando só existe o construtor padrão, este é invocado implicitamente pelo construtor da classe filha – primeira instrução; • Entretanto, quando existe um construtor com algum parâmetro, este tem de ser invocado explicitamente, através da cláusula super; Thiago Rodrigues POO 7 package PCK; public class JMae { protected int x; public int getX() { return x; } public JMae(int x) { this.x = x; } } package PCK; public class JFilha extends JMae { protected float y; public float getY() { return y; } public JFilha(int x, float y) { super(x); this.y = y; } } Thiago Rodrigues POO 8 Cláusula super • Objetivo de invocar um método da classe mãe. Útil quando queremos “incrementar” um método herdado e não simplesmente sobrecrevê-lo; package classe; //possui um método que public class JMae{ //inicializa um atributo protected int x; public void set(int x){ this.x = x; System.out.println("x:"+this.x);} } package classe; //possui um método que import classe.JMae; //inicializa dois atri public class JFilha extends JMae{ //butos sendo um herda protected int y; //do (sobrecarga) public void set(int x, int y){ super.set(x); this.y = y; System.out.println("y:"+this.y); } } Método da classe JMae
Compartilhar