SlideShare uma empresa Scribd logo
1 de 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
5
Super Classe
Sub Classe
Podemos falar que Sub Classe herda
propriedades e comportamentos de
Super Classe.
Super Classe: Classe mãe
Sub Classe: Classe filha
• 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
8
Essa não seria uma boa prática, pois nem todos os funcionários
possuem bônus. Somente os gerentes possuem.
• Herança
9
Também não é uma boa prática pois há muita reescrita de código. As
duas classes são praticamente iguais.
• 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
11
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
• Herança
– Implementação
12
public class Funcionario {
public String nome;
public double salario;
public int horasExtras;
}
public class Gerente extends Funcionario {
public double bonus;
}
• Herança
13
Funcionário
Gerente
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
herança múltipla!Diretor Assistente
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
16
public class Funcionario {
public String nome;
public double salario;
public int horasExtras;
public void calcularSalarioTotal(){
double salarioTotal = salario + (horasExtras * 10);
System.out.println(salarioTotal);
}
}
• 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
19
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.
• 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
24
public class Funcionario {
public String nome;
public double salario;
public int horasExtras;
public Funcionario(String nome){
this.nome = nome;
}
public void calcularSalarioTotal(){
double salarioTotal = salario + (horasExtras * 10);
System.out.println(salarioTotal);
}
}
O this referencia a
própria classe.
• Construtores
– Dessa forma, deverá ser passado o
parâmetro nome sempre que um novo
Funcionário for criado.
25
Funcionario f1 = new Funcionario(“Joao Silva”);
• 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
27
public class Gerente extends Funcionario{
public double bonus;
public Gerente(String nome){
super(nome);
}
public void calcularSalarioTotal(){
double salarioTotal = salario + (horasExtras * 10) + bonus;
System.out.println(salarioTotal);
}
}
O super referencia a
classe mãe.
• Fim!
28

Mais conteúdo relacionado

Mais procurados

Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – IIGabriel Faustino
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a ObjetosIgor Takenami
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Leinylson Fontinele
 
JAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTOJAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTOAndré Victor
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosArthur Emanuel
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Rodrigo Kono
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceArthur Emanuel
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5César Augusto Pessôa
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POODaniel Brandão
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosLeonardo Melo Santos
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesRegis Magalhães
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysLoiane Groner
 

Mais procurados (20)

Programação orientada a objetos – II
Programação orientada a objetos – IIProgramação orientada a objetos – II
Programação orientada a objetos – II
 
Programação Orientada a Objetos
Programação Orientada a ObjetosProgramação Orientada a Objetos
Programação Orientada a Objetos
 
POO - 06 - Encapsulamento
POO - 06 - EncapsulamentoPOO - 06 - Encapsulamento
POO - 06 - Encapsulamento
 
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
Banco de Dados I - Aula 06 - Banco de Dados Relacional (Modelo Lógico)
 
Aula 09 - introducao oo
Aula 09 - introducao ooAula 09 - introducao oo
Aula 09 - introducao oo
 
POO - 13 - Arrays em Java
POO - 13 - Arrays em JavaPOO - 13 - Arrays em Java
POO - 13 - Arrays em Java
 
JAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTOJAVA - ENCAPSULAMENTO
JAVA - ENCAPSULAMENTO
 
Java: Introdução à Orientação a Objetos
Java: Introdução à Orientação a ObjetosJava: Introdução à Orientação a Objetos
Java: Introdução à Orientação a Objetos
 
Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)Boas práticas técnica para um código limpo (Clean Code)
Boas práticas técnica para um código limpo (Clean Code)
 
Encapsulamento em oo
Encapsulamento em ooEncapsulamento em oo
Encapsulamento em oo
 
Programando com Python
Programando com PythonProgramando com Python
Programando com Python
 
Java: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, InterfaceJava: Classes Abstratas, Anônimas, Interface
Java: Classes Abstratas, Anônimas, Interface
 
02 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.502 - Orientação a objetos e revisão de C# v1.5
02 - Orientação a objetos e revisão de C# v1.5
 
POO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de MétodosPOO - 18 - Sobrecarga e Sobreposição de Métodos
POO - 18 - Sobrecarga e Sobreposição de Métodos
 
Aula 1 - Introdução a POO
Aula 1 -  Introdução a POOAula 1 -  Introdução a POO
Aula 1 - Introdução a POO
 
PCII AULA 3 - INTERFACES EM JAVA
PCII AULA 3 - INTERFACES EM JAVAPCII AULA 3 - INTERFACES EM JAVA
PCII AULA 3 - INTERFACES EM JAVA
 
Conceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetosConceitos básicos de programação orientada a objetos
Conceitos básicos de programação orientada a objetos
 
Meta Programming in Groovy
Meta Programming in GroovyMeta Programming in Groovy
Meta Programming in Groovy
 
Java 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas InterfacesJava 10 Classes Abstratas Interfaces
Java 10 Classes Abstratas Interfaces
 
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e ArraysEstrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
Estrutura de Dados e Algoritmos com Java #02-12: Vetores e Arrays
 

Destaque

Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Pablo Dall'Oglio
 
Demoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a horaDemoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a horaVanderson Silva
 
Java NIO.2: Mais uma API para I/O?
Java NIO.2: Mais uma API para I/O?Java NIO.2: Mais uma API para I/O?
Java NIO.2: Mais uma API para I/O?OzJUG
 
Estratégias para Otimização de Consultas do Hibernate em uma Aplicação Web
Estratégias para Otimização de Consultas do Hibernate em uma Aplicação WebEstratégias para Otimização de Consultas do Hibernate em uma Aplicação Web
Estratégias para Otimização de Consultas do Hibernate em uma Aplicação WebAllan Silva
 
Java Wars: Então você quer ser um Desenvolvedor?
Java Wars: Então você quer ser um Desenvolvedor?Java Wars: Então você quer ser um Desenvolvedor?
Java Wars: Então você quer ser um Desenvolvedor?Allan Silva
 
Conheça mais o SlideShare
Conheça mais o SlideShareConheça mais o SlideShare
Conheça mais o SlideShareRafael Pinheiro
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-paneRafael Pinheiro
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPiMasters
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPiMasters
 
TESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot WordTESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot WordP.ESPERANCA
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHPAugusto Pascutti
 

Destaque (20)

PHP - Arrays
PHP - ArraysPHP - Arrays
PHP - Arrays
 
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
Construindo ERP's com PHP: Desafios em design, manutenção segurança e perf...
 
Demoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a horaDemoiselle 3 Está chegando a hora
Demoiselle 3 Está chegando a hora
 
Java NIO.2: Mais uma API para I/O?
Java NIO.2: Mais uma API para I/O?Java NIO.2: Mais uma API para I/O?
Java NIO.2: Mais uma API para I/O?
 
Estratégias para Otimização de Consultas do Hibernate em uma Aplicação Web
Estratégias para Otimização de Consultas do Hibernate em uma Aplicação WebEstratégias para Otimização de Consultas do Hibernate em uma Aplicação Web
Estratégias para Otimização de Consultas do Hibernate em uma Aplicação Web
 
Java Wars: Então você quer ser um Desenvolvedor?
Java Wars: Então você quer ser um Desenvolvedor?Java Wars: Então você quer ser um Desenvolvedor?
Java Wars: Então você quer ser um Desenvolvedor?
 
Conheça mais o SlideShare
Conheça mais o SlideShareConheça mais o SlideShare
Conheça mais o SlideShare
 
Mini Curso Wordpress
Mini Curso WordpressMini Curso Wordpress
Mini Curso Wordpress
 
POO - Aula 1 introducao
POO - Aula 1   introducaoPOO - Aula 1   introducao
POO - Aula 1 introducao
 
Aula 2 conversao de variaveis j option-pane
Aula 2   conversao de variaveis j option-paneAula 2   conversao de variaveis j option-pane
Aula 2 conversao de variaveis j option-pane
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHPPHP Experience 2016 - [Palestra] Rumo à Certificação PHP
PHP Experience 2016 - [Palestra] Rumo à Certificação PHP
 
Metodologia SCRUM
Metodologia SCRUMMetodologia SCRUM
Metodologia SCRUM
 
PHP Orientado a Objetos
PHP Orientado a ObjetosPHP Orientado a Objetos
PHP Orientado a Objetos
 
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHPPHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
PHP Experience 2016 - [Workshop] Elastic Search: Turbinando sua aplicação PHP
 
Curso de PHP - Arrays
Curso de PHP - ArraysCurso de PHP - Arrays
Curso de PHP - Arrays
 
Php array
Php arrayPhp array
Php array
 
Linguagem PHP
Linguagem PHPLinguagem PHP
Linguagem PHP
 
TESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot WordTESTE DE AVALIAÇÃO - Microsot Word
TESTE DE AVALIAÇÃO - Microsot Word
 
Orientação a Objetos com PHP
Orientação a Objetos com PHPOrientação a Objetos com PHP
Orientação a Objetos com PHP
 

Semelhante a Aula 4 herança, sobrescrita de métodos, construtor

Heranca reescrita e_polimorfismo
Heranca reescrita e_polimorfismoHeranca reescrita e_polimorfismo
Heranca reescrita e_polimorfismoPedro Neto
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosDaniel Brandão
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaDaniel Brandão
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - JavaArthur Emanuel
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetosMateus Parente
 
Aprendizado de máquina
Aprendizado de máquinaAprendizado de máquina
Aprendizado de máquinaparasite
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Thyago Maia
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Elaine Cecília Gatto
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratasPedro Neto
 
Aula 04 - Templates e Operators
Aula 04 - Templates e OperatorsAula 04 - Templates e Operators
Aula 04 - Templates e OperatorsPeslPinguim
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - SubalgoritmosCarlos Santos
 

Semelhante a Aula 4 herança, sobrescrita de métodos, construtor (20)

Heranca reescrita e_polimorfismo
Heranca reescrita e_polimorfismoHeranca reescrita e_polimorfismo
Heranca reescrita e_polimorfismo
 
Aula Herança
Aula HerançaAula Herança
Aula Herança
 
Encapsulamento em Orientação a Objetos
Encapsulamento em Orientação a ObjetosEncapsulamento em Orientação a Objetos
Encapsulamento em Orientação a Objetos
 
Programação Orientação a Objetos - Herança
Programação Orientação a Objetos - HerançaProgramação Orientação a Objetos - Herança
Programação Orientação a Objetos - Herança
 
Aula 3.ppt
Aula 3.pptAula 3.ppt
Aula 3.ppt
 
Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Tutorial Java: Interface
Tutorial Java: InterfaceTutorial Java: Interface
Tutorial Java: Interface
 
Java & orientação a objetos
Java & orientação a objetosJava & orientação a objetos
Java & orientação a objetos
 
Aprendizado de máquina
Aprendizado de máquinaAprendizado de máquina
Aprendizado de máquina
 
Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3Desenvolvimento Web com PHP - Aula 3
Desenvolvimento Web com PHP - Aula 3
 
Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1Tutorial java orientação a objetos parte 1
Tutorial java orientação a objetos parte 1
 
Refatoração
RefatoraçãoRefatoração
Refatoração
 
Gsp313 desafio selo_01
Gsp313 desafio selo_01Gsp313 desafio selo_01
Gsp313 desafio selo_01
 
Nao sensivel
Nao sensivelNao sensivel
Nao sensivel
 
Refactoring
RefactoringRefactoring
Refactoring
 
Classes abstratas
Classes abstratasClasses abstratas
Classes abstratas
 
Aula 04 - Templates e Operators
Aula 04 - Templates e OperatorsAula 04 - Templates e Operators
Aula 04 - Templates e Operators
 
Aula04
Aula04Aula04
Aula04
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 
(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos(A10) LabMM3 - JavaScript - Subalgoritmos
(A10) LabMM3 - JavaScript - Subalgoritmos
 

Aula 4 herança, sobrescrita de métodos, construtor

  • 1. Programação Orientada a Objetos Aula 4 Curso: Análise e Desenvolvimento de Sistemas Professor: Rafael Wendel Pinheiro
  • 2. • Roteiro da Aula – Herança – Overloading de métodos – Construtores – Exercícios 2
  • 4. • 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
  • 5. • Herança 5 Super Classe Sub Classe Podemos falar que Sub Classe herda propriedades e comportamentos de Super Classe. Super Classe: Classe mãe Sub Classe: Classe filha
  • 6. • Herança – Contextualizando... – Imagine que um software necessita salvar seu quadro de funcionários. Para isso teremos a classe Funcionário. 6
  • 7. • 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
  • 8. • Herança 8 Essa não seria uma boa prática, pois nem todos os funcionários possuem bônus. Somente os gerentes possuem.
  • 9. • Herança 9 Também não é uma boa prática pois há muita reescrita de código. As duas classes são praticamente iguais.
  • 10. • 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
  • 11. • Herança 11 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
  • 12. • Herança – Implementação 12 public class Funcionario { public String nome; public double salario; public int horasExtras; } public class Gerente extends Funcionario { public double bonus; }
  • 13. • Herança 13 Funcionário Gerente 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 herança múltipla!Diretor Assistente
  • 15. • 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
  • 16. • Overloading de métodos 16 public class Funcionario { public String nome; public double salario; public int horasExtras; public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10); System.out.println(salarioTotal); } }
  • 17. • 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
  • 18. • 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
  • 19. • Overloading de métodos 19 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.
  • 20. • 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
  • 22. • 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
  • 23. • 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
  • 24. • Construtores 24 public class Funcionario { public String nome; public double salario; public int horasExtras; public Funcionario(String nome){ this.nome = nome; } public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10); System.out.println(salarioTotal); } } O this referencia a própria classe.
  • 25. • Construtores – Dessa forma, deverá ser passado o parâmetro nome sempre que um novo Funcionário for criado. 25 Funcionario f1 = new Funcionario(“Joao Silva”);
  • 26. • 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
  • 27. • Construtores 27 public class Gerente extends Funcionario{ public double bonus; public Gerente(String nome){ super(nome); } public void calcularSalarioTotal(){ double salarioTotal = salario + (horasExtras * 10) + bonus; System.out.println(salarioTotal); } } O super referencia a classe mãe.