You are on page 1of 5

ISUTC – Programação II 2013 Mujhahid Abdul Karim

Versão 0.1

Programação II POO – Cont. Herança & Sobrecarregar

Ficha(s) Pratica(s) 6

Programação Orientada a Objectos - Herança


Na aula passada (ficha 5), definiu-se o que é herança, fez-se comparação da Herança em java com a
Herança na vida real, chegando a conclusão que o JAVA tende a seguir os mesmos conceitos da
Herança por nos conhecido, onde uma Pessoa deixa os seus bens para uma outra pessoa, e que
normalmente esse recurso aplica-se quando existe alguma semelhança entre ambas partes.

Também vimos algumas terminologias usadas nos diversos livros para referir-se aos termos da
Herança.

Exercício de Aplicação para o entendimento da palavra reservada super()


Quais são os passos detalhados a seguir para conseguirmos aplicar correctamente os mecanismos da
Herança?
• Identificar as classes, identificar os atributos, normalizar as classes (regularizar as classes)

Uma Empresa de Venda de Viaturas tem Vendedores e Administradores.


• A Empresa deseja saber de todos o nome e número-do-BI/Passaporte;
• Os Vendedores têm um salário base estipulado na tabela salarial, mas eles também
tem uma comissão das suas vendas (5% das vendas).
• Os Administradores também recebem segundo a tabela salarial um salário fixo, mas
podem ganhar horas extras adicionais (O salário das horas extras: salário/100 por
hora);

Classe Object
Em Java todas as classes que não declaramos explicitamente a sua super classe, o compilador
interpreta a classe como se fosse um Object
Demonstração 1:

Veja como o compilador ira interpretar:


Demonstração 2:

Os métodos da classe Object que ira-se usar mais nas aulas são equals() e toString()

1
ISUTC – Programação II 2013 Mujhahid Abdul Karim
Versão 0.1
Método toString()

• Sintaxe - Demonstração 3:

Onde no lugar do null, deve-se colocar o que realmente deseja imprimir.

Veja a linha de código abaixo, estamos a criar um objecto da classe Funcionário, preenchemos
os dados e estamos a imprimir o objecto, o que ira aparecer?

Demonstração 4:

Resultado da Demonstração 4:

Agora, finalmente de modo a ficar mais claro, veja o método toString abaixo, aqui esta a acontecer
a Sobreescrita (veja a aula passada), onde estamos invocando o toString da classe Object e
estamos a sobreescrever porque não queremos usar método da maneira que foi implementado pela
classe Object.

Analogia: Isso não se difere de um filho que herda um Veiculo do Pai, e ele sente a necessidade de
usar o Veiculo, mas antes disso ele manda pintar com outra cor, muda as jantes e coloca um
aparelho de som melhor. E ainda assim ele continua usando o carro do Pai, mas da maneira que ele
gosta.

2
ISUTC – Programação II 2013 Mujhahid Abdul Karim
Versão 0.1
Resultado da Demonstração 4:

Então, todo esse tempo que tentávamos imprimir um objecto, ele primeiro procurava se a nossa
classe tem um método toString(), como nunca encontrava ele assumia o método toString() da classe
Object.

E por ultimo já deve ter notado que, não há necessidade de invocar o método toString() da seguinte
maneira:

Basta apenas escrever:

O compilador implicitamente percebe que o programador já tem o conhecimento do funcionamento


do método toString() e faz o trabalho de procurar pelo método.

Sobrecarregar (overload)
Este conceito de forma alguma deve ser confundido com sobreescrita ou o termo conhecido em
inglês override. A regra do sobreescrever deve ser feito mantendo a assinatura do método e os
parâmetros, ou seja a assinatura deve estar intacta.

O conceito de Sobrecarregar entende-se como ter dois métodos com o mesmo nome, mas com
parâmetros diferentes, veja a demonstração abaixo, métodos iguais com o numero de parâmetros
diferentes.

TPC para aula Pratica


1. Terminar o exercício de aplicação acima para o caso do Administrador.
2. Dar um exemplo do uso do método da classe Object, o equals() .

3
ISUTC – Programação II 2013 Mujhahid Abdul Karim
Versão 0.1

Resolução do Exercício de Aplicação

Classe Funcionário
package Aula6;

public class Funcionario


{
protected String nome;
protected String tipo_doc;
protected String doc_identificacao;
protected double salario;

public Funcionario(String nome, String tipo_doc, String doc_identificacao, double salario) {


this.nome = nome;
this.tipo_doc = tipo_doc;
this.doc_identificacao = doc_identificacao;
this.salario = salario;
}

public String getNome() {


return nome;
}
public void setNome(String nome) {
this.nome = nome;
}

public String getTipo_doc() {


return tipo_doc;
}

public String getDoc_identificacao() {


return doc_identificacao;
}

public double getSalario() {


return salario;
}

public String toString()


{
return "nome: " + nome + ", tipo de documento: " + tipo_doc +
", numero documento: " +doc_identificacao + ", salario: " +salario;
}
}

Classe Vendedor

package Aula6;

public class Vendedor extends Funcionario{

private double comissao_vendas;

public Vendedor(String nome, String tipo_doc, String doc_identificacao, double salario)


{
super(nome, tipo_doc, doc_identificacao, salario);
this.comissao_vendas=0;
}

public void actualiza_vendas(double valor){


comissao_vendas = comissao_vendas + valor;
}

public void actualiza_vendas(){


comissao_vendas = comissao_vendas;
}

public double calcula_salario(){


return getSalario()+(comissao_vendas*0.05);
}

4
ISUTC – Programação II 2013 Mujhahid Abdul Karim
Versão 0.1

public double calcula_salario(double taxa){


return getSalario()+(comissao_vendas*taxa);
}

public String toString()


{
return super.toString() + "comissao vendas: " + comissao_vendas;
}
}

Metodo Main

package Aula6;

public class ArrancaEmpresaViaturas {

public static void main(String[] args) {

//Sem o metodo toString Sobrescrito


Vendedor func = new Vendedor
("Marcos", "BI", "110006575F", 50000);

System.out.println(func);
}
}

--- FIM DO DOCUMENTO ---

You might also like