![Page 1: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/1.jpg)
Herança
![Page 2: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/2.jpg)
Herança
Mecanismo que permite criar novas classes a partir de classes existentes
Classe herdeira possui os atributos e métodos da classe herdada
Pode acrescentar novos atributos e métodos Pode sobrescrever métodos da classe
ascendente
![Page 3: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/3.jpg)
Herança
Para criar classes derivadas, utiliza-se a palavra reservada extends
Exemplo:
public class CarroLuxo extends Carro { … }
![Page 4: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/4.jpg)
Herança public class Carro {
int velocidade;
boolean motor;
public void ligar(){
motor = true;
}
public void acelerar(){
velocidade++;
}
}
public class CarroLuxo extends Carro {
public void acelerar(){
velocidade += 2;
}
}
![Page 5: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/5.jpg)
Herança Não há limite para hierarquia de herança public class Carro { } public class CarroLuxo extends Carro { } public class CarroInvisivil extens CarroLuxo { }
Em Java não existe herança múltipla public class CarroInvisivil extends Veiculo, Aparelho { }
![Page 6: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/6.jpg)
Herança
Pode haver hierarquias complexas
![Page 7: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/7.jpg)
Termos
Classe base Classe derivada
Classe mãe Classe filha
Superclasse Subclasse
Classe ascendente Classe herdeira
Classe genérica Classe específica
Termos frequentemente usados:
![Page 8: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/8.jpg)
Sobrescrita
A classe herdeira possui “automaticamente” todos os atributos e métodos da classe base
Se um atributo ou método for escrito novamente, ele sobrescreve o método da classe base
Sobrescrever != sobrecarregar Sobrescrever == sobrepor == override Métodos sobrepostos fazem a mesma tarefa, de
um jeito diferente
![Page 9: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/9.jpg)
Sobrescrita
A assinatura do método sobrescrito deve ser idêntica a do método definido na classe base
Método na classe base public void acelerar(int vezes) { … } Método na classe derivada public void acelerar(int vezes) { … }
![Page 10: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/10.jpg)
Sobrescrita O modificador e o tipo de retorno podem ser
diferentes No entanto, o método da subclasse só pode dar
acesso mais amplo e nunca mais restrito Válido
– Classe base• void acelerar( ) {...}
– Classe derivada• public void acelerar( ) {…}
![Page 11: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/11.jpg)
Sobrescrita
(cont.) Inválido
– Classe base• public void acelerar( ) {...}
– Classe derivada• void acelerar( ) {…}
![Page 12: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/12.jpg)
Sobrescrita
Pergunta: isso pode? Classe base
– private void acelerar( ) {...} Classe derivada
– public void acelerar( ) {…}
![Page 13: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/13.jpg)
Sobrescrita
Pergunta: isso pode? Classe base
– private void acelerar( ) {...} Classe derivada
– public void acelerar( ) {…}
Métodos privados não são herdados, portanto este não é um caso de sobrescrita
![Page 14: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/14.jpg)
Sobreposição de método public class Carro {
int velocidade;
boolean motor;
public void ligar(){
motor = true;
}
public void acelerar(){
velocidade++;
}
}
public class CarroLuxo extends Carro {
public void acelerar(){
velocidade += 2;
}
}
![Page 15: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/15.jpg)
Construtores
Construtores não são herdados, mas são chamados automaticamente quando um objeto da classe filha é instanciado
Se um construtor da classe mãe não for chamado explicitamente, o construtor padrão ou o construtor que não recebe argumentos é chamado
Para escolher o construtor ou chamar explicitamente, usa-se a palavra reservada super
![Page 16: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/16.jpg)
Construtores
Classe base não tem construtor Ao instanciar objeto da subclasse, o construtor
default é chamado
public class Carro { int velocidade; boolean motor;
//demais métodos }
public class CarroLuxo extends Carro { ArCondicionado arCondicionado;
public CarroLuxo( ){ arCondicionado = false; }
![Page 17: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/17.jpg)
Construtores
Classe base tem construtor “void” Ao instanciar objeto da subclasse, o construtor
void é chamado
public class Carro { int velocidade; boolean motor;
public Carro(){ velocidade =0; motor = true; }
public class CarroLuxo extends Carro { ArCondicionado arCondicionado;
public CarroLuxo( ){ arCondicionado = true; }
![Page 18: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/18.jpg)
Construtores Classe base tem mais de um construtor Ao instanciar objeto da subclasse, o construtor void é
chamado
public class Carro { int velocidade; boolean motor;
public Carro(){ velocidade =0; motor = true; }
public Carro(int vel, boolean mot){ Velocidade = vel; motor = mot; }
public class CarroLuxo extends Carro { ArCondicionado arCondicionado;
public CarroLuxo( ){ arCondicionado = true; }
![Page 19: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/19.jpg)
Construtores Classe base tem mais de um construtor O construtor da subclasse pode escolher qual
construtor será chamado
public class Carro { int velocidade; boolean motor;
public Carro(){ velocidade =0; motor = true; }
public Carro(int vel, boolean mot){ Velocidade = vel; motor = mot; }
public class CarroLuxo extends Carro { ArCondicionado arCondicionado;
public CarroLuxo( ){ super(); arCondicionado = true; }
![Page 20: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/20.jpg)
Construtores O construtor da subclasse pode escolher qual
construtor será chamado Outro exemplo:
public class Carro { int velocidade; boolean motor;
public Carro(){ velocidade =0; motor = true; }
public Carro(int vel, boolean mot){ Velocidade = vel; motor = mot; }
public class CarroLuxo extends Carro { ArCondicionado arCondicionado;
public CarroLuxo( ){ super(0, true); arCondicionado = true; }
![Page 21: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/21.jpg)
Herança - recapitulando
As classes derivadas são um subtipo da classe base– Relação “é um”
Aplicação da herança– Reuso de implementação
Produz relacionamento estático entre as classes– Alteração na superclasse afeta todos os objetos
![Page 22: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/22.jpg)
Superclasse Cósmica Object
Todas as classes são derivadas da superclasse predefinida Object
Object é a classe mais ancestral de todas (raiz da hierarquia)
Não é necessário a palavra extends para que a classe herde de Object
![Page 23: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/23.jpg)
Superclasse Cósmica Object
A nossa classe Carro possuiu o método toString( ), mesmo que não o tenhamos escrito, pois foi herdado de Object
Assim:
Carro c = new Carro( );
System.out.println(c.toString( ));
![Page 24: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/24.jpg)
Herança - Modificador private Atributos private
– São herdados mas não são acessíveis na subclasse
– Podem ser acessados por métodos público herdados (gets e sets)
Métodos private– Não são herdados
![Page 25: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/25.jpg)
Herança - Modificador protected O modificador protected é muito relacionado à
herança Protected está entre o modificador public e o
modificador default Define
– Acesso de pacote– Acesso por subclasses, estejam ou não no
mesmo pacote
![Page 26: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/26.jpg)
Referências
Uma referência da superclasse pode ser instanciada com um objeto da classe derivada
Carro c = new CarroLuxo();
No entanto, não é possível chamar métodos da classe derivada utilizando a referência
c.ligarAr( ); //erro
![Page 27: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/27.jpg)
Referências
Uma referência da subclasse não pode ser instanciada com um objeto da classe derivada
CarroLuxo c = new Carro(); //erro
No entanto, é possível fazer casting CarroLuxo c = (CarroLuxo) new Carro();
![Page 28: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/28.jpg)
Exercício Crie uma classe Veiculo que tenha os atributos placa, marca,
modelo, ano e valor de mercado e métodos acessores e modificadores além de um método chamado toString( ) que retorna os valores dos atributos. Crie subclasses Automovel e Motocicleta. Para automóveis, armazene a quantidade de portas. Para motocicletas, armazene a quantidade de cilindradas. Crie um método calcularIpva( ):– 3,5% do valor de mercado para veículos– 2,5% do valor de mercado para motocicletas– Se automóvel com mais de 20 anos, ele é isento– Se motocicleta com mais de 10 anos, ela é isenta
![Page 29: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/29.jpg)
Modificadores static e final Modificador static faz com que o atributo e
método seja da classe e não da instância Exemplo: public class Conta { static int sequencia; // variável de classe int numero; //variável de instância ...
![Page 30: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/30.jpg)
Modificador static Um atributo static é compartilhado por todas as
instâncias da classe Exemplo Conta c1 = new Conta( ); Conta c2 = new Conta( ); c1.sequencia = 2; System.out.println(c2.sequencia); // imprime 2
![Page 31: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/31.jpg)
Modificador static Um atributo static geralmente é chamado a
partir da classe, e não a partir do objeto Exemplo
Conta.sequencia = 2;
![Page 32: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/32.jpg)
Modificador static Um método static é um método de classe Podem ser chamados a partir da classe ou de um
objeto Geralmente é chamado a partir da classe, e não a
partir do objeto Exemplo
Classe.metodoX( );
![Page 33: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/33.jpg)
Modificador final O modificador final aplicado a uma classe não
permite que ela seja herdada por outra classe O modificador final aplicado a um método, não
permite que ele seja herdado por uma subclasse
O modificador final aplicado a um atributo não permite que seu valor seja alterado (atribuído mais de uma vez)
![Page 34: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/34.jpg)
Modificador final (cont.) Exempo: public class Carro { final int VEL_MAX = 240;
public void setVEL_MAX( ) { VEL_MAX = 250; //erro
![Page 35: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/35.jpg)
Modificador final (cont.) Isto é válido: public class Carro { final int VEL_MAX=0;
public Carro ( ) { VEL_MAX = 240; }
![Page 36: Herança. Mecanismo que permite criar novas classes a partir de classes existentes Classe herdeira possui os atributos e métodos da classe herdada Pode](https://reader036.vdocuments.mx/reader036/viewer/2022062502/570638501a28abb8238f87f3/html5/thumbnails/36.jpg)
Modificador final (cont.) Na prática: public class Carro { public static final int VEL_MAX = 250;
O modificador static é colocado para frisar que trata-se de uma constante da classe
Além de não poder ser modificado, pode ser acessado sem instanciar um objeto