tutorial java: herança
TRANSCRIPT
TUTORIAL JAVA: HERANÇA
DISCIPLINA: LINGUAGEM DE
PROGRAMAÇÃO II
Prof.ª M.ª Eng.ª Elaine Cecília Gatto
Bauru-SP
2015
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
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
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
Passo 12: Testar o seu projeto. Limpe e construa o projeto. Em seguida execute.
_____________________________________Página 5 de 18
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
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
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
}
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
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
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
}
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
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
"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
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
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
}
@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
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