tutorial java: herança

23
TUTORIAL JAVA: HERANÇA DISCIPLINA: LINGUAGEM DE PROGRAMAÇÃO II Prof.ª M.ª Eng.ª Elaine Cecília Gatto Bauru-SP

Upload: elaine-cecilia-gatto

Post on 15-Apr-2017

372 views

Category:

Education


1 download

TRANSCRIPT

Page 1: Tutorial Java: Herança

TUTORIAL JAVA: HERANÇA

DISCIPLINA: LINGUAGEM DE

PROGRAMAÇÃO II

Prof.ª M.ª Eng.ª Elaine Cecília Gatto

Bauru-SP

2015

Page 2: Tutorial Java: Herança

SumárioINTRODUÇÃO.............................................................................................................................................3

Exemplo1: Criando e utilizando uma classe Java com herança................................................................3

Exemplo2: Criando e utilizando uma classe sem herança.............................................................................5

Exemplo3: Criando e utilizando uma hierarquia de herança.....................................................................7

Exemplo4: Hierarquia de Herança com variáveis de instância protected.................................................9

Exemplo5: Hierarquia de Herança com variáveis de instância private...................................................12

Exemplo6: Construtores em subclasses...................................................................................................15

_____________________________________Página 2 de 18

Page 3: Tutorial Java: Herança

INTRODUÇÃO

Neste tutorial, uma hierarquia de herança que contém tipos de empregados em uma aplicação Java para folha de

pagamento de uma empresa, será utilizada para exemplificar a utilização do conceito de herança em Java, assim como o

relacionamento entre superclasses e subclasses.

Na empresa X, os empregados comissionados recebem uma porcentagem de suas vendas, enquanto que empregados

comissionados com salário-base recebem um salário-base mais uma porcentagem de suas vendas.

Exemplo1: Criando e utilizando uma classe Java com herança

Neste exemplo a classe comissaoEmpregado herda diretamente da classe Object e declara como vaiáveis de instância

private o nome, sobrenome, SSN, taxa de comissão e quantidade de venda bruta (total). Podemos utilizar a herança para criar

classes de classes existentes. Cada classe Java herda uma classe existente, menos a classe Object que é a primeira classe de

todas na linguagem Java.

Como a classe comissaoEmpregado herda a classe Object, a classe comissaoEmpregado herda os métodos da classe

Object que, por sua vez, não tem nenhum campo. Cada classe Java herda direta ou indiretamente os métodos da classe Object.

Se uma classe não especificar que ela herda outra classe, a nova classe herda da classe Object implicitamente. Por essa razão,

normalmente não incluímos “extends Object” no nosso código. Entretanto, neste exemplo, isto será feito apenas a título de

demonstração.

O compilador Java configura a superclasse de uma classe como OBJECT quando a declaração de classe não estender

uma superclasse explicitamente. É um erro de SINTAXE sobrescrever um método com um modificador de acesso mais

restrito. Um método público da superclasse não pode tornar-se um método protegido ou privado na subclasse. Um método

protegido da superclasse não pode tornar-se um método privado na subclasse. Fazer isso quebraria o relacionamento É UM no

qual se exige que todos os objetos da subclasse sejam capazes de responder a chamadas de método feitas para os métodos

públicos declarados na superclasse. Se um método público pudesse ser sobrescrito como um método protegido ou privado, os

objetos de subclasse não seriam capazes de responder as mesmas chamadas de métodos como objetos de superclasse. Uma vez

que um método é declarado público em uma superclasse, o método permanece público para todas as subclasses diretas e

indiretas da classe

Passo 1: crie um projeto (aplicação java) no netbeans chamado “Tutorial” (não é necessário criar a classe principal)

Passo 2: crie uma classe Java com o nome comissaoEmpregado e a faça extender a classe OBJECT (public class

comissaoEmpregado extends Object)

Passo 3: declare os seguintes campos (atributos) na sua classe como private String primeiroNome, String ultimoNome,

String numeroSeguroSocial, double vendasBrutasSemanais, double porcentagemComissao

Passo 4: crie um construtor vazio para a classe

Passo 5: crie um construtor parametrizado para a classe (todos os atributos da classe devem entrar)

_____________________________________Página 3 de 18

Page 4: Tutorial Java: Herança

Passo 6: crie os métodos SET e GET para todos os atributos da classe (use o recurso do botão direito do mouse)

Passo 7: modifique o método setVendasBrutasSemanais para: public void setVendasBrutasSemanais(double vendasBrutasSemanais) {

this.vendasBrutasSemanais = (vendasBrutasSemanais < 0.0) ? 0.0 : vendasBrutasSemanais;

}

Passo 8: modifique o método setPorcentagemComissao para:public void setPorcentagemComissao(double porcentagemComissao) {

this.porcentagemComissao =

(porcentagemComissao > 0.0 && porcentagemComissao < 1.0) ? porcentagemComissao : 0.0;

}

Passo 9: adicione os métodos abaixo no final da classepublic double calculaLucro(){

return porcentagemComissao * vendasBrutasSemanais;

}

public String toString(){

return String.format(" %s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f",

" empregado ", primeiroNome, ultimoNome,

" numero do seguro social ", numeroSeguroSocial,

" vendas brutas semanais ", vendasBrutasSemanais,

" porcentagem de comissão ", porcentagemComissao);

}

Passo 10: criar uma classe java principal chamada testaComissaoEmpregado

Passo 11: adicionar o seguinte código na classecomissaoEmpregado ce = new comissaoEmpregado("Suzana", "Santos", "000-000-000", 10000, 0.6);

System.out.println(" Informações do empregado obtidas pelos métodos get");

System.out.printf(" %s %s \n", "O primeiro nome é: ", ce.getPrimeiroNome());

System.out.printf(" %s %s \n", "O ultimo nome é: ", ce.getUltimoNome());

System.out.printf(" %s %s \n", "O número do seguro social é: ",

ce.getNumeroSeguroSocial());

System.out.printf(" %s %.2f \n", "As vendas brutas semanais são: ",

ce.getVendasBrutasSemanais());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

ce.getPorcentagemComissao());

ce.setVendasBrutasSemanais(500);

ce.setPorcentagemComissao(.1);

System.out.printf(" \n %s: \n \n %s \n", "Informações atualizadas do empregado obtidas

pelo método toString", ce.toString());

_____________________________________Página 4 de 18

Page 5: Tutorial Java: Herança

Passo 12: Testar o seu projeto. Limpe e construa o projeto. Em seguida execute.

_____________________________________Página 5 de 18

Page 6: Tutorial Java: Herança

Exemplo2: Criando e utilizando uma classe sem herança

Vamos declarar e testar uma classe chamada baseMaisComissaoEmpregado que conterá nome, sobrenome, SSN,

quantidade de vendas brutas, taxa de comissão e salário-base. Neste exemplo declaramos uma classe que também herda

diretamente da classe Object e declara como variáveis de instância private um nome, sobrenome, SSN, taxa de comissão,

quantidade bruta de vendas e salário-base. Criamos a última escrevendo cada linha de código que a classe exige. Nota: é muito

mais eficiente criar essa classe herdando da classe comissaoEmpregado. As variáveis e métodos encapsulam todos os recursos

necessários de um empregado comissionado com salário-base. Note a semelhança entre essa classe e a classe

comissaoEmpregado.

Copiar e colar código de uma classe para outra pode espalhar erros por múltiplos arquivos de códigos-fonte. Para

evitar a duplicação de código, e possivelmente erros, utilize a herança, em vez da abordagem copiar-colar, em situação em que

você quer que uma classe absorva as variáveis de instancia e métodos de outras classes. Com a herança, as variáveis de

instancia comuns e os métodos de todas as classes na hierarquia são declarados em uma superclasse. Quando as alterações são

requeridas para esses recursos comuns, os desenvolvedores de software só precisam fazer as alterações na superclasse. As

subclasses então herdam as alterações. Sem a herança, as alterações precisariam ser feitas em todos os arquivos de código-

fonte que contem uma cópia do código em questão.

Passo 1: no seu projeto tutorial criar uma classe java comum chamada baseMaisComissaoEmpregado

Passo 2: nessa classe, criar os seguinte atributos private String primeiroNome, String ultimoNome, String

numeroSeguroSocial, double vendasBrutasSemanais, double porcentagemComissao, double salário-base

Passo 3: criar um método construtor vazio

Passo 4: criar um método construtor parametrizado (todos os atributos da classe devem entrar neste construtor)

Passo 5: criar os métodos SET e GET (use o botão direito do mouse)

Passo 6: modificar o método setVendasBrutasSemanais para o código abaixopublic void setVendasBrutasSemanais(double vendasBrutasSemanais) {

this.vendasBrutasSemanais = (vendasBrutasSemanais < 0.0 ) ? 0.0 :

vendasBrutasSemanais;

}

Passo 7: modificar o método setComissaoEmpregado para o código abaixo public void setPorcentagemComissao(double porcentagemComissao) {

this.porcentagemComissao =(porcentagemComissao > 0.0 && porcentagemComissao < 1.0 ) ?

porcentagemComissao : 0.0;

}

Passo 8: modificar o método setPorcentagemComissao para o código abaixo

_____________________________________Página 6 de 18

Page 7: Tutorial Java: Herança

public void setPorcentagemComissao(double porcentagemComissao) {

this.porcentagemComissao =(porcentagemComissao > 0.0 && porcentagemComissao < 1.0 ) ?

porcentagemComissao : 0.0;

}

Passo 9: modificar o método setSalarioBase para o código abaixopublic void setSalarioBase(double salarioBase) {

this.salarioBase = (salarioBase < 0.0 ) ? 0.0 : salarioBase;

}

Passo 10: adicionar os métodos abaixo na sua classepublic double calculaLucro() {

return salarioBase + ( porcentagemComissao * vendasBrutasSemanais);

}

public String toString() {

return String.format("%s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f \n %s %.2f",

"empregado ", primeiroNome, ultimoNome,

"numero do seguro social ", numeroSeguroSocial,

"vendas brutas semanais ", vendasBrutasSemanais,

"porcentagem de comissão ", porcentagemComissao,

"salario base", salarioBase);

}

Passo 11: crie uma classe java principal chamada testaBaseMaisComissao

Passo 12: adicione o código abaixo na classebaseMaisComissaoEmpregado base = new baseMaisComissaoEmpregado("Pedro", "Silva", "111-111-

111", 5000, .04,300);

System.out.println(" Informações do empregado obtidas pelos métodos get");

System.out.printf(" %s %s \n", "O primeiro nome é: ", base.getPrimeiroNome());

System.out.printf(" %s %s \n", "O ultimo nome é: ", base.getUltimoNome());

System.out.printf(" %s %s \n", "O número do seguro social é: ",

base.getNumeroSeguroSocial());

System.out.printf(" %s %.2f \n", "As vendas brutas semanais são: ",

base.getVendasBrutasSemanais());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

base.getPorcentagemComissao());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

base.getSalarioBase());

base.setSalarioBase(1000);

System.out.printf(" \n %s: \n \n %s \n", "Informações atualizadas do empregado obtidas

pelo método toString", base.toString());

Passo 13: limpe e construa o projeto. Em seguida, clique com o botão direito no arquivo da classe principal java e mande

executar o arquivo.

_____________________________________Página 7 de 18

Page 8: Tutorial Java: Herança

Exemplo3: Criando e utilizando uma hierarquia de herança

Neste exemplo a classe baseMaisComissaoEmpregado vai herdar da classe comissaoEmpregado. Neste terceiro

exemplo declaramos uma classe separada que herda a classe comissaoEmpregado. A classe baseMaisComissaoEmpregado é

uma comissaoEmpregado que também tem um salário-base e tenta acessar membros private da classe comissaoEmpregado.

Isso resulta em erros de compilação, porque a sublcasse não pode acessar as variáveis de instância private da superclasse. Um

erro de compilação ocorre se um construtor de subclasse chamar um de seus construtores de superclasse com argumentos que

não correspondem exatamente ao número e tipos de parâmetros especificados em uma das declarações de construtor de

superclasse.

Passo 1: no seu projeto TUTORIAL crie uma classe chamada baseMaisComissaoEmpregado2. Após a criação desta classe,

faça-a extender a classe comissaoEmpregado (public class baseMaisComissaoEmpregado2 extends comissaoEmpregado)

Passo 2: crie o atributo de classe privado double salarioBase;

Passo 3: crie um construtor vazio

Passo 4: crie um construtor com apenas o salário base

Passo 5: crie um construtor parametrizado (deve conter os parâmetros da superclasse)

Passo 6: crie os métodos SET e GET da classe

Passo 7: inclua esta linha de código no construtor criado no passo 5: setSalarioBase(salarioBase);

Passo 8: modifique o método setSalarioBase parapublic void setSalarioBase(double salarioBase) {

this.salarioBase = (salarioBase < 0.0 ) ? 0.0 : salarioBase;

}

Passo 9: adicione os métodos abaixo no final da classe public double calculaLucro() {

return salarioBase + ( comissaoEmpregado + vendasBrutasSemanais);

}

@Override

public String toString() {

return String.format(" %s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f \n %s %.2f ",

"empregado ", primeiroNome, ultimoNome,

"numero do seguro social ", numeroSeguroSocial,

"vendas brutas semanais ", vendasBrutasSemanais,

"porcentagem de comissão ", porcentagemComissao,

"salario base", salarioBase);

_____________________________________Página 8 de 18

Page 9: Tutorial Java: Herança

}

Passo 10: limpe e construa o projeto. Veja os erros apontados no console da IDE.

Pergunta-se, porque o netbeans está marcando várias linhas com um erro? Explique. Qual solução você daria para resolver

estes problemas?

_____________________________________Página 9 de 18

Page 10: Tutorial Java: Herança

Exemplo4: Hierarquia de Herança com variáveis de instância protected

Neste exemplo 4 mostramos que, se as variáveis de instância da comissaoEmpregado são declaradas como protected,

uma classe baseMaisComissaoEmpregado que herda a classe comissaoEmpregado pode acessar esses dados diretamente. Para

esse propósito, declaramos a classe comissaoEmpregado com as variáveis de instância protected. Ambas as classes contem

funcionalidades idênticas, mas mostramos como é mais fácil criar e gerenciar a classe baseMaisComissaoEmpregado. Para

permitir que a classe baseMaisComissaoEmpregado acesse diretamente as variáveis de instância da superclasse, podemos

declarar esses membro como protected na superclasse. Os membros protected de uma superclasse são herdados por todas as

subclasses dessa superclasse. A classe comissaoEmpregado2 é uma modificação da classe comissaoEmpregado que declara as

variáveis de instância como protected em vez de private. Diferente da alteração no nome da classe (e consequentemente

alteração no nome do construtor), o resto da declaração da classe é idêntico.

Utilize o modificador de acesso PROTECTED quando uma superclasse precisar fornecer um método somente para

suas subclasses e outras classes no mesmo pacote, mas não para outros clientes. Declarar as variáveis de instancia da

superclasse PROVATE, em oposição a protected, permite a implementação de superclasse dessas variáveis de instancia para

alterar sem afetar as implementações da subclasse. Quando possível, não inclua variáveis de instância PROTECTED em uma

superclasse. Em vez disso, inclua métodos NÃO-PRIVATE que acessam as variáveis de instância private. Isso assegurará que

os objetos da classe mantenham estados consistentes.

Passo 1: no seu projeto TUTORIAL criar uma classe java comum chamada comissaoEmpregado2

Passo 2: criar os seguintes atributos PROTEGIDOS nesta classe String primeiroNome, String ultimoNome, String

numeroSeguroSocial, double vendasBrutasSemanais, double porcentagemComissao

Passo 3: criar um método construtor vazio

Passo 4: criar um método construtor parametrizado

Passo 5: criar os métodos SET e GET

Passo 6: modificar o método setVendasBrutasSemanais parapublic void setVendasBrutasSemanais(double vendasBrutasSemanais) {

this.vendasBrutasSemanais = (vendasBrutasSemanais < 0.0) ? 0.0 : vendasBrutasSemanais;

}

Passo 7: modificar o método setComissaoEmpregado para public void setPorcentagemComissao(double porcentagemComissao) {

this.porcentagemComissao =(porcentagemComissao > 0.0 && porcentagemComissao < 1.0 ) ?

porcentagemComissao : 0.0;

}

Passo 8: adicionar os métodos abaixo ao final da sua classe public double calculaLucro() {

_____________________________________Página 10 de 18

Page 11: Tutorial Java: Herança

return porcentagemComissao * vendasBrutasSemanais;

}

@Override

public String toString() {

return String.format(" %s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f",

"comissao do empregado", primeiroNome, ultimoNome,

"numero do seguro social", numeroSeguroSocial,

"vendas brutas semanais", vendasBrutasSemanais,

"porcentagem de comissao", porcentagemComissao);

}

Passo 9: criar uma classe java comum em seu projeto TUTORIAL chamada baseMaisComissaoEmpregado3. Fazer a classe

estender a classe comissaoEmpregado2 (public class baseMaisComissaoEmpregado3 extends comissaoEmpregado2)

Passo 10: criar um atributo privado para esta classe do tipo double chamado salário-base

Passo 11: criar um construtor vazio para esta classe

Passo 12: criar um construtor parametrizado para esta classe com salário base

Passo 13: criar um construtor parametrizado para esta com os parâmetros da superclasse

Passo 14: criar os métodos SET e GET para esta classe

Passo 15: adicionar a seguinte linha no construtor do item 13 setSalarioBase(salarioBase);

Passo 16: modificar o método setSalarioBase para public void setSalarioBase(double salarioBase) {

this.salarioBase = (salarioBase < 0.0 ) ? 0.0 : salarioBase;

}

Passo 17: adicionar os seguintes métodos ao final da sua classe public double calculaLucro() {

return salarioBase + (porcentagemComissao * vendasBrutasSemanais);

}

@Override

public String toString() {

return String.format(" %s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f \n %s %.2f ",

"empregado ", primeiroNome, ultimoNome,

"numero do seguro social ", numeroSeguroSocial,

"vendas brutas semanais ", vendasBrutasSemanais,

"porcentagem de comissão ", porcentagemComissao,

"salario base", salarioBase);

_____________________________________Página 11 de 18

Page 12: Tutorial Java: Herança

}

Passo 18: criar uma classe java principal chamada testaBaseMaisComissao2

Passo 19: adicione o seguinte código nesta classe baseMaisComissaoEmpregado3 base = new baseMaisComissaoEmpregado3(300, "Barbara", "Caversan", "333-333-333", 6000, .05);

System.out.println(" Informações do empregado obtidas pelos métodos get");

System.out.printf(" %s %s \n", "O primeiro nome é: ", base.getPrimeiroNome());

System.out.printf(" %s %s \n", "O ultimo nome é: ", base.getUltimoNome());

System.out.printf(" %s %s \n", "O número do seguro social é: ",

base.getNumeroSeguroSocial());

System.out.printf(" %s %.2f \n", "As vendas brutas semanais são: ",

base.getVendasBrutasSemanais());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

base.getPorcentagemComissao());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

base.getSalarioBase());

base.setSalarioBase(1000);

System.out.printf(" \n %s: \n \n %s \n", "Informações atualizadas do empregado obtidas

pelo método toString", base.toString());

Passo 20: limpe e construa o projeto. Em seguida, clique com o botão direito no arquivo da classe principal java e mande

executar o arquivo.

_____________________________________Página 12 de 18

Page 13: Tutorial Java: Herança

Exemplo5: Hierarquia de Herança com variáveis de instância private

Neste exemplo vamos configurar as variáveis de instancia comissaoEmpregado novamente como private na classe

comissaoEmpregado para impor boa engenharia de software. Então, mostramos como uma classe

baseMaisComissaoEmpregado separada, que herda a classe comissaoEmpregado, pode utilizar métodos public de

comissaoEmpregado para manipular variáveis de instância private de comissaoEmpregado.

Quando um método de superclasse é sobrescrito em uma subclasse, a versão de subclasse frequentemente chama a

versão de superclasse para fazer uma parte do trabalho. A falha em prefixar o nome do método da superclasse com a palavra-

chave super e um separador ponto (.) ao referenciar o método da superclasse faz com que o método de subclasse chame a si

próprio, criando um erro chamado recursão infinita. A recursão, utilizada corretamente, é uma capacidade poderosa.

Passo 1: no seu projeto TUTORIAL criar uma classe java comum chamada comissaoEmpregado3

Passo 2: criar os seguintes atributos PRIVATE nesta classe String primeiroNome, String ultimoNome, String

numeroSeguroSocial, double vendasBrutasSemanais, double porcentagemComissao

Passo 3: criar um método construtor vazio

Passo 4: criar um método construtor parametrizado

Passo 5: criar os métodos SET e GET

Passo 6: modificar o método setVendasBrutasSemanais parapublic void setVendasBrutasSemanais(double vendasBrutasSemanais) {

this.vendasBrutasSemanais = (vendasBrutasSemanais < 0.0) ? 0.0 : vendasBrutasSemanais;

}

Passo 7: modificar o método setComissaoEmpregado para public void setPorcentagemComissao(double porcentagemComissao) {

this.porcentagemComissao =(porcentagemComissao > 0.0 && porcentagemComissao < 1.0 ) ?

porcentagemComissao : 0.0;

}

Passo 8: adicionar os métodos abaixo ao final da sua classe public double calculaLucro() {

return getPorcentagemComissao() * getVendasBrutasSemanais();

}

@Override

public String toString() {

return String.format(" %s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f",

"comissao do empregado", getPrimeiroNome(), getUltimoNome(),

"numero do seguro social", getNumeroSeguroSocial(),

_____________________________________Página 13 de 18

Page 14: Tutorial Java: Herança

"vendas brutas semanais", getVendasBrutasSemanais(),

"porcentagem de comissao", getPorcentagemComissao());

}

Passo 9: criar uma classe java comum em seu projeto TUTORIAL chamada baseMaisComissaoEmpregado4. Fazer a classe

estender a classe comissaoEmpregado3 (public class baseMaisComissaoEmpregado4 extends comissaoEmpregado3)

Passo 10: criar um atributo privado para esta classe do tipo double chamado salário-base

Passo 11: criar um construtor vazio para esta classe

Passo 12: criar um construtor parametrizado para esta classe com salário base

Passo 13: criar um construtor parametrizado para esta com os parâmetros da superclasse

Passo 14: criar os métodos SET e GET para esta classe

Passo 15: adicionar a seguinte linha no construtor do item 13 setSalarioBase(salarioBase);

Passo 16: modificar o método setSalarioBase para public void setSalarioBase(double salarioBase) {

this.salarioBase = (salarioBase < 0.0 ) ? 0.0 : salarioBase;

}

Passo 17: adicionar os seguintes métodos ao final da sua classe @Override

public double calculaLucro() {

return getSalarioBase() + super.calculaLucro();

}

@Override

public String toString() {

return String.format(" %s %s \n %s: %.2f", "salario base",

super.toString(), "salario base", getSalarioBase());

}

Passo 18: criar uma classe java principal chamada testaBaseMaisComissao3

Passo 19: adicione o seguinte código nesta classe baseMaisComissaoEmpregado3 base = new baseMaisComissaoEmpregado3(300, "Barbara", "Caversan", "333-333-333", 6000, .05);

System.out.println(" Informações do empregado obtidas pelos métodos get");

System.out.printf(" %s %s \n", "O primeiro nome é: ", base.getPrimeiroNome());

_____________________________________Página 14 de 18

Page 15: Tutorial Java: Herança

System.out.printf(" %s %s \n", "O ultimo nome é: ", base.getUltimoNome());

System.out.printf(" %s %s \n", "O número do seguro social é: ",

base.getNumeroSeguroSocial());

System.out.printf(" %s %.2f \n", "As vendas brutas semanais são: ",

base.getVendasBrutasSemanais());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

base.getPorcentagemComissao());

System.out.printf(" %s %.2f \n", "A comissão do empregado é: ",

base.getSalarioBase());

base.setSalarioBase(1000);

System.out.printf(" \n %s: \n \n %s \n", "Informações atualizadas do empregado obtidas

pelo método toString", base.toString());

Passo 20: limpe e construa o projeto. Em seguida, clique com o botão direito no arquivo da classe principal java e mande

executar o arquivo.

_____________________________________Página 15 de 18

Page 16: Tutorial Java: Herança

Exemplo6: Construtores em subclasses

Instanciar um objeto de subclasse inicia uma cadeia de chamadas de construtor em que o construtor de subclasse,

antes de realizar suas próprias tarefas, invoca o construtor de sua superclasse direta explícita – via referencia de super – ou

implicitamente – chamando o construtor padrão ou o construtor sem argumentos da superclasse. De maneira semelhante, se a

superclasse é derivada de outra classe – como é, naturalmente, cada classe exceto OBJECT – o construtor de superclasse

invoca o construtor da próxima classe no topo da hierarquia, e assim por diante. O último construtor chamado na cadeia é

sempre o construtor da classe OBJECT. O corpo do construtor de subclasse original termina a execução por último. O

construtor de cada superclasse manipula as variáveis de instancia de superclasse que o objeto de subclasse herda.

Quando um programa cria um objeto da subclasse, o construtor da subclasse imediatamente chama o construtor da

superclasse – explicitamente, via super ou implicitamente. O corpo do construtor de superclasse executa para inicializar as

variáveis de instancia da superclasse que fazem parte do objeto da subclasse, então o corpo do construtor da subclasse executa

para inicializar variáveis de instancia somente da subclasse. O java assegura que, mesmo se um construtor não atribuir um

valor a uma variável de instancia, a variável ainda é inicializada como seu valor padrão – por exemplo, zero para tipos

numéricos primitivos, false para boolenas, nul para referencias.

Passo 1: no seu projeto TUTORIAL criar uma classe java comum chamada comissaoEmpregado4

Passo 2: criar os seguintes atributos PRIVATE nesta classe String primeiroNome, String ultimoNome, String

numeroSeguroSocial, double vendasBrutasSemanais, double porcentagemComissao

Passo 3: criar um método construtor vazio

Passo 4: criar um método construtor parametrizado

Passo 5: criar os métodos SET e GET

Passo 6: modificar o método setVendasBrutasSemanais parapublic void setVendasBrutasSemanais(double vendasBrutasSemanais) {

this.vendasBrutasSemanais = (vendasBrutasSemanais < 0.0) ? 0.0 : vendasBrutasSemanais;

}

Passo 7: modificar o método setComissaoEmpregado para public void setPorcentagemComissao(double porcentagemComissao) {

this.porcentagemComissao =(porcentagemComissao > 0.0 && porcentagemComissao < 1.0 ) ?

porcentagemComissao : 0.0;

}

Passo 8: adicionar os métodos abaixo ao final da sua classe public double calculaLucro() {

return getPorcentagemComissao() * getVendasBrutasSemanais();

_____________________________________Página 16 de 18

Page 17: Tutorial Java: Herança

}

@Override

public String toString() {

return String.format(" %s: %s %s \n %s: %s \n %s: %.2f \n %s: %.2f",

"comissao do empregado", getPrimeiroNome(), getUltimoNome(),

"numero do seguro social", getNumeroSeguroSocial(),

"vendas brutas semanais", getVendasBrutasSemanais(),

"porcentagem de comissao", getPorcentagemComissao());

}

Passo 9: adicione o trecho de código abaixo dentro do seu construtor parametrizado:System.out.println(" CONSTRUTOR DA CLASSE COMISSÃO EMPREGADO 4 ");

Passo 10: criar uma classe java comum em seu projeto TUTORIAL chamada baseMaisComissaoEmpregado5. Fazer a classe

estender a classe comissaoEmpregado4 (public class baseMaisComissaoEmpregado5 extends comissaoEmpregado4)

Passo 11: criar um atributo privado para esta classe do tipo double chamado salário-base

Passo 12: criar um construtor vazio para esta classe

Passo 13: criar um construtor parametrizado para esta classe com salário base

Passo 14: criar um construtor parametrizado para esta com os parâmetros da superclasse

Passo 15: criar os métodos SET e GET para esta classe

Passo 16: adicionar a seguinte linha no construtor do item 13 setSalarioBase(salarioBase);

Passo 17: modificar o método setSalarioBase para public void setSalarioBase(double salarioBase) {

this.salarioBase = (salarioBase < 0.0 ) ? 0.0 : salarioBase;

}

Passo 18: adicionar os seguintes métodos ao final da sua classe @Override

public double calculaLucro() {

return getSalarioBase() + super.calculaLucro();

}

@Override

public String toString() {

return String.format(" %s %s \n %s: %.2f", "salario base",

super.toString(), "salario base", getSalarioBase());

}

_____________________________________Página 17 de 18

Page 18: Tutorial Java: Herança

Passo 19: adicionar a seguinte linha de código dentro do construtor parametrizadoSystem.out.println(" CONSTRUTOR DA CLASSE BASE MAIS COMISSAO EMPREGADO 5");

Passo 20: criar uma classe java principal chamada testaBaseMaisComissao4

Passo 21: adicione o seguinte código nesta classecomissaoEmpregado4 ce4 = new comissaoEmpregado4("Laura", "Magalhães", "444-444-444",

5000, .04);

System.out.println(" ---------------------------------------------------- ");

System.out.println(ce4.toString());

System.out.println(" ---------------------------------------------------- ");

baseMaisComissaoEmpregado3 base3 = new baseMaisComissaoEmpregado3(300, "Lisa",

"Garcia", "333-333-333", 6000, .05);

System.out.println(base3.toString());

System.out.println(" ---------------------------------------------------- ");

baseMaisComissaoEmpregado4 base4 = new baseMaisComissaoEmpregado4(400, "Anderson",

"Gonçalves", "222-222-222", 7000, .01);

System.out.println(base4.toString());

System.out.println(" ---------------------------------------------------- ");

Passo 22: limpe e construa o projeto. Em seguida, clique com o botão direito no arquivo da classe principal java e mande

executar o arquivo.

_____________________________________Página 18 de 18