Anda di halaman 1dari 5

Disciplina: Programao Orientada a Objetos B Prof: Valdivino Santiago Notas de Aula 08

Herana Diagrama de Classes (Exemplo 1 Herana)

Pessoa private nome private endereco private identidade private sexo Pessoa public obterSexo public toString

Funcionario private salario Funcionario public obterSalario public idadeAposentar public toString

A declarao de uma Classe com a palavra-chave extends significa que a Classe em questo est herdando de uma outra Classe. Ex: class Funcionario extends Pessoa /*Funcionario (subclasse) herda de Pessoa (superclasse)*/

Programao Orientada a Objetos B

Prof. Valdivino Santiago

OBS1: No Diagrama de Classe mostrado, todos os atributos da Classe Pessoa so privados (private). Anteriormente, foi mencionado que atributos e mtodos privados no so herdados pelas subclasses. Porm, existe uma discordncia entre autores sobre o fato de atributos privados serem herdados ou no pelas subclasses. A especificao da linguagem em Java diz que atributos privados no podem ser herdados pelas subclasses. Mas, tais atributos podem ser acessados de forma indireta pelas subclasses. Ento, em termos da linguagem Java, poderia haver duas abordagens em relao herana de atributos pelas subclasses: 1.) a Classe ter a sua prpria verso dos atributos herdados. Neste caso, os atributos privados no so considerados herdados, o que est de acordo com a especificao da linguagem Java; 2.) existir o acesso aos atributos, de forma direta ou indireta. Neste caso, os atributos privados so considerados herdados. Porm, os atributos privados somente podem ser acessados e modificados pelas Classes que os declaram diretamente (superclasses), no podendo ser acessados e modificados pelas Classes herdeiras (subclasses). Em outras palavras acesso indireto dos atributos privados das superclasses pelas subclasses. Ex: class Funcionario extends Pessoa // Herana { //Atributos private double salario; // Construtor Funcionario(String nf, String enf, int idf, char sf, double sal) { super(nf, enf, idf, sf); salario = sal; } // Fim de Construtor Existem dois modos de reutilizar mtodos das superclasses que no tenham sido declarados como private: 1.) se a execuo do mtodo for a mesma para a superclasse e a subclasse, ento instncias da subclasse podem chamar diretamente o mtodo como se fosse um mtodo delas mesmas. Ex: obterSexo; 2.) se no existe um mtodo da superclasse que realize, exatamente, uma tarefa desejada pela subclasse, mas existem mtodos das superclasses que resolvem parte da tarefa, ento uma subclasse poderia executar o mtodo da superclasse que resolve a tarefa parcial, e executar comandos especficos para completar a tarefa. Um mtodo de uma subclasse pode chamar um mtodo de uma superclasse por meio da palavra-chave super. super classe ancestral imediata. Ex: super(nf, enf, idf, sf); //chamada do construtor da superclasse Pessoa Regras para uso da palavra-chave super para chamar mtodos de superclasses:

Programao Orientada a Objetos B

Prof. Valdivino Santiago

a.) construtores so chamados simplesmente pela palavra-chave super, seguida pelos argumentos a serem passados para o construtor entre parnteses. Se no houver argumentos super(); b.) outros mtodos so chamados pela palavra-chave super seguida de um ponto, do nome do mtodo e argumentos entre parnteses. Se no houver argumentos super.nome_mtodo(). Ex: super.toString(); // chamada do mtodo toString da superclasse Pessoa; c.) construtores de superclasses somente poder ser invocados de dentro de construtores de subclasses e, mesmo assim, somente se forem declarados na primeira linha de cdigo do construtor da subclasse. Outros mtodos no podem invocar construtores de superclasses; d.) somente os mtodos, construtores e outros, da superclasse imediata podem ser chamados usando a palavra-chave super. No possvel super.super.nome_mtodo(); e.) Um construtor de uma subclasse sempre chama o construtor de sua superclasse, mesmo que a chamada no seja explcita. Se a chamada no for explcita, por meio da palavra-chave super, ento o construtor da subclasse tentar chamar o construtor vazio (sem argumentos) da superclasse. Se este construtor no estiver definido erro de compilao. Programas Ex1Heranca.java, Pessoa.java e Funcionario.java class Ex1Heranca { public static void main (String[] argumentos) { Pessoa p1 = new Pessoa("Rogerio", "Rua A, 25", 123456, 'M'); Funcionario f1 = new Funcionario("Paula", "Rua B, 12", 456789, 'F', 2000.00); double salf1 = f1.obterSalario(); System.out.println(); System.out.println(p1); System.out.println(f1); System.out.println("Salario - f1: "+salf1); } // Fim de main. } // Fim da Classe Ex1Heranca.

class Pessoa { //Atributos private String nome;

Programao Orientada a Objetos B

Prof. Valdivino Santiago

private String endereco; private int identidade; private char sexo; // Construtor Pessoa(String n, String en, int id, char s) { nome = n; endereco = en; identidade = id; sexo = s; } // Fim de Construtor public char obterSexo() { return sexo; } public String toString() { String resultado = "Nome: "+nome+"\n"; resultado += "Endereco: "+endereco+"\n"; resultado += "Identidade: "+identidade+"\n"; resultado += "Sexo: "+sexo+"\n"; return resultado; } } // Fim da Classe Pessoa.

class Funcionario extends Pessoa // Herana { //Atributos private double salario; // Construtor Funcionario(String nf, String enf, int idf, char sf, double sal) { super(nf, enf, idf, sf); salario = sal; } // Fim de Construtor public double obterSalario() { return salario; } public byte idadeAposentar()

Programao Orientada a Objetos B

Prof. Valdivino Santiago

byte idade; char sxf;

//sexo='F'; sxf = obterSexo(); // Modo 1 System.out.println("Sexo - Classe Funcionario: "+sxf); if (sxf == 'M') idade = 65; else idade = 60; return idade; } public String toString() { String resultado; byte idade; // mtodo toString da Classe Pessoa - Modo 2 resultado = super.toString(); resultado += "Salario: "+salario+"\n"; idade = idadeAposentar(); resultado += "Idade Minima para Aposentar: "+idade+"\n"; return resultado; } } // Fim da Classe Funcionario

Programao Orientada a Objetos B

Prof. Valdivino Santiago

Anda mungkin juga menyukai