Você está na página 1de 28

Programação Orientada a

Objetos
Aula 4
Curso: Análise e Desenvolvimento de Sistemas
Professor: Rafael Wendel Pinheiro
• Roteiro da Aula

– Herança
– Overloading de métodos
– Construtores
– Exercícios

2
Herança

3
• Herança
– Em Orientação à Objetos, Herança é a
capacidade de uma classe herdar as
propriedades e comportamentos públicos ou
protegidos de uma outra classe.
– Esse processo visa evitar a reescrita de
códigos.

4
• Herança

Super Classe
Podemos falar que Sub Classe herda
propriedades e comportamentos de
Super Classe.

Super Classe: Classe mãe


Sub Classe: Classe filha
Sub Classe

5
• Herança
– Contextualizando...
– Imagine que um software necessita salvar
seu quadro de funcionários. Para isso
teremos a classe Funcionário.

6
• Herança
– Dentro do quadro de funcionários, existem
aqueles que são gerentes. Para os gerentes,
é necessário um atributo “bonus” (exclusivo
de todos os gerentes).
– Como implementar então?

7
• Herança

Essa não seria uma boa prática, pois nem todos os funcionários
possuem bônus. Somente os gerentes possuem.
8
• Herança

Também não é uma boa prática pois há muita reescrita de código. As


duas classes são praticamente iguais.
9
• Herança
– Nesse contexto, os Gerentes terão todos os
atributos de um funcionário e mais o atributo
“bonus”.
– Então, poderemos criar uma relação de
herança entre a classe Funcionário e a
classe Gerente.

10
• Herança

A classe Gerente vai herdar todos os


atributos da classe Funcionário

Funcionário é super classe / classe


mãe de Gerente

Gerente é uma sub classe / classe filha


de Funcionário

11
• Herança
– Implementação
public class Funcionario {
public String nome;
public double salario;
public int horasExtras;
}

public class Gerente extends Funcionario {


public double bonus;
}
12
• Herança

Funcionário Uma classe mãe pode


ter várias classes filhas,
mas cada classe filha
pode ter somente UMA
classe mãe.

JAVA não suporta


Gerente Diretor Assistente herança múltipla!

13
Sobrescrita (Overloading) de
métodos

14
• Overloading de métodos
– Para o nosso exemplo Gerente ->
Funcionário, imagine que há um método
responsável por calcular e imprimir o salário
total de um funcionário se baseando nos
atributos salario e no número de horas
extras.

15
• Overloading de métodos
public class Funcionario {
public String nome;
public double salario;
public int horasExtras;

public void calcularSalarioTotal(){


double salarioTotal = salario + (horasExtras * 10);
System.out.println(salarioTotal);
}
}

16
• Overloading de métodos
– O método calcularSalarioTotal() será
herdado na classe Gerente. Logo, toda
instância de Gerente também poderá
executá-lo.
– Porém, o salário dos Gerentes têm uma
particularidade, já que eles possuem um
bônus no salário por exercerem a gerência.

17
• Overloading de métodos
– Nesse caso, poderíamos implementar o
método calcularSalarioTotalGerente(), mas
isso não impossibilitaria as instâncias de
ainda executarem o método
calcularSalarioTotal(), que fora herdado da
classe Funcionário.
– Nesse caso, podemos sobrescrever o
método calcularSalarioTotal() na classe
Gerente.
18
• Overloading de métodos
public class Gerente extends Funcionario{
public double bonus;

public void calcularSalarioTotal(){


double salarioTotal = salario + (horasExtras * 10) + bonus;
System.out.println(salarioTotal);
}
}

Nesse caso, o método foi sobrescrito. Logo, se o método


calcularSalarioTotal() for invocado por uma instância de Gerente,
esse será executado e não o da classe Funcionário.
19
• Exercício 1
– Implemente as classes Carro e Moto, sendo que esses
possuem marca, modelo e quantCombustivel. Para
esse projeto, será necessário implementar o método
andar(int distancia, int velocidade). Todos os veículos
consomem 1L de combustível para dar a partida antes de
andar. Os carros consomem 14L/KM se estiverem abaixo
de 100Km/hora e 10KM/L se estiverem acima dessa
velocidade. As motos consomem 25km/L abaixo de
100km/h e 18km/L acima. Toda vez que o método for
invocado, deverá ser atualizado a quantidade de
combustível e imprimir as informações: Marca/Modelo:
combustível inicial, distância e velocidade e combustível
final.. 20
Construtores

21
• Construtores
– Os construtores (erroneamente chamados
de métodos construtores) é um bloco com o
mesmo nome da classe que é
automaticamente executado sempre que
uma nova instância da classe é criada
(através do comando new).

22
• Construtores
– Por exemplo, quando vamos criar um
funcionário (instância da classe Funcionario),
não faz sentido que esse não tenha nome.
Então, podemos “forçar” que toda vez que um
Funcionário for criado, ele automaticamente
precisa receber um nome (que será
armazenado no atributo nome).

23
• Construtores
public class Funcionario {
public String nome;
public double salario;
public int horasExtras;

public Funcionario(String nome){


this.nome = nome;
} O this referencia a
própria classe.
public void calcularSalarioTotal(){
double salarioTotal = salario + (horasExtras * 10);
System.out.println(salarioTotal);
}
24
}
• Construtores
– Dessa forma, deverá ser passado o
parâmetro nome sempre que um novo
Funcionário for criado.

Funcionario f1 = new Funcionario(“Joao Silva”);

25
• Construtores
– A implementação de um construtor em uma
classe mãe obriga que todas as suas classes
filhas também possuam um construtor.

26
• Construtores
public class Gerente extends Funcionario{
public double bonus;

public Gerente(String nome){


super(nome);
} O super referencia a
classe mãe.
public void calcularSalarioTotal(){
double salarioTotal = salario + (horasExtras * 10) + bonus;
System.out.println(salarioTotal);
}
}
27
• Fim!

28

Você também pode gostar