2. _____________________________________
Página 2 de 6
INTRODUÇÃO
No tutorial anterior, foi criada uma hierarquia de classes de funcionários comissionados, em que a classe base mais
comissão empregado foi herdada da classe comissão empregado. Neste tutorial, usaremos os exemplos criados no tutorial
anterior. Nesta seção, serão utilizados métodos abstratos e polimorfismo para realizar os cálculos da folha de pagamento com
base no tipo de funcionário. A hierarquia de classe trabalhada neste tutorial é apresentada na Figura (10.2) abaixo. Este tutorial
foi feito com base no livro JAVA COMO PROGRAMAR dos autores DEITEL & DEITEL.
1: Criando a superclasse abstrata EMPREGADO
A Figura (10.3) abaixo apresenta a INTERFACE POLIMÓRFICA para a hierarquia de classe “EMPREGADO”.
3. _____________________________________
Página 3 de 6
Passo 1: Entre no Netbeans. Vá ao menu arquivo, escolha a opção NOVO PROJETO. Selecione Java, Aplicação Java e clique
em próximo. Em seguida, dê o nome ao projeto de Tutorial2 e desmarque a opção para criar automaticamente uma classe Java
principal. Quando o projeto estiver criado, clique com o botão direito em cima do nome do projeto, selecione NOVO, escolha
NOVO PACOTE e dê o nome de “br.com.tutorial2”. Agora, clique com o botão direito no pacote e escolha NOVO. Peça uma
nova classe Java (comum). Dê a ela o nome de “Empregado”. Em seguida, vá até a classe criada e adicione a palavra-chave
ABSTRACT como mostra o exemplo: public abstract class Empregado { }
Passo 2: Crie os seguintes atributos PRIVADOS da classe: String pNome, String uNome, String SSN;
Passo 3: Crie um construtor vazio
Passo 4: Crie um construtor parametrizado
Passo 5: Crie os métodos SET e GET
Passo 6: Adicione os métodos abaixo ao final da classe:
@Override
public String toString() {
return String.format("%s %snsocial security number: %s", getpNome(), getuNome(), getSSN());
}
public abstract double earnings();
2: Criando a subclasse concreta SalarioEmpregado
Passo 1: Clique com o botão direito sob o pacote da classe “br.com.tutorial2”. Selecione NOVO. Selecione CLASSE JAVA.
Dê a ela o nome de SalarioEmpregado. Em seguida, faça esta classe EXTENDER a classe Empregado.
Passo 2: Crie o seguinte atributo PRIVADO da classe: double salarioSemanal
Passo 3: Crie um construtor vazio
Passo 4: Crie os construtores parametrizados
Passo 5: Crie os métodos SET e GET
Passo 6: Adicione os métodos abaixo ao final da classe:
@Override
public double earnings() {
return getSalarioSemanal();
}
@Override
public String toString() {
return String.format("salaried employee: %sn%s: $%,.2f", super.toString(), "weekly salary",
getSalarioSemanal());
}
Passo 7: Modifique o método setSalarioEmpregado para:
public void setSalarioSemanal(double salarioSemanal) {
this.salarioSemanal = salarioSemanal < 0.0 ? 0.0 : salarioSemanal;
}
4. _____________________________________
Página 4 de 6
3: Criando a subclasse concreta HorasEmpregado
Passo 1: Clique com o botão direito sob o pacote da classe “br.com.tutorial2”. Selecione NOVO. Selecione CLASSE JA VA.
Dê a ela o nome de HorasEmpregado. Em seguida, faça esta classe EXTENDER a classe Empregado.
Passo 2: Crie os seguintes atributos PRIVADOs da classe: double salario e double horas
Passo 3: Crie um construtor vazio
Passo 4: Crie os construtores parametrizados
Passo 5: Crie os métodos SET e GET
Passo 6: Adicione os métodos abaixo ao final da classe:
@Override
public double earnings() {
if (getHoras() <= 40) {
return getSalario() * getHoras();
} else {
return 40 * getSalario() + (getHoras() - 40) * getSalario() * 1.5;
}
}
@Override
public String toString() {
return String.format("horas do empregado %sn%s: $%,.2f; %s: %,.2f", super.toString(),
"salário", getSalario(), "horas trabalhadas", getHoras());
}
Passo 7: Modifique o método setSalario para:
public void setSalario(double salario) {
this.salario = (salario < 0.0 ) ? 0.0 : salario;
}
Passo 8: Modifique o método setHoras para:
public void setHoras(double horas) {
this.horas = ( ( horas >= 0.0 ) && ( horas <= 168.0 ) ) ? horas : 0.0;
}
4: Criando a subclasse concreta ComissaoEmpregado
Passo 1: Clique com o botão direito sob o pacote da classe “br.com.tutorial2”. Selecione NOVO. Selecione CLASSE JAVA.
Dê a ela o nome de ComissaoEmpregado. Em seguida, faça esta classe EXTENDER a classe Empregado.
Passo 2: Crie os seguintes atributos PRIVADOs da classe: double porcentagemComissao e double vendasBrutasSemanais
Passo 3: Crie um construtor vazio
Passo 4: Crie os construtores parametrizados
Passo 5: Crie os métodos SET e GET
Passo 6: Modifique o método setPorcentagemComissao para
public void setPorcentagemComissao(double porcentagemComissao) {
5. _____________________________________
Página 5 de 6
this.porcentagemComissao = ( porcentagemComissao > 0.0 && porcentagemComissao < 1.0 )
? porcentagemComissao : 0.0;
}
Passo 7: Modifique o método setVendasBrutasSemanais para
public void setVendasBrutasSemanais(double vendasBrutasSemanais) {
this.vendasBrutasSemanais = ( vendasBrutasSemanais < 0.0 ) ? 0.0 :
vendasBrutasSemanais;
}
Passo 8: Adicione os métodos abaixo ao final da classe:
@Override
public double earnings() {
return getPorcentagemComissao()* getVendasBrutasSemanais();
}
@Override
public String toString() {
return String.format("%s: %sn%s: $%,.2f; %s: %.2f", "commission employee",
super.toString(), "gross sales", getVendasBrutasSemanais(), "commission rate",
getPorcentagemComissao());
}
5: Criando a subclasse concreta indireta BaseMaisComissao
Passo 1: Clique com o botão direito sob o pacote da classe “br.com.tutorial2”. Selecione NOVO. Selecione CLASSE JAVA.
Dê a ela o nome de BaseMaisComissao. Em seguida, faça esta classe EXTENDER a classe ComissaoEmpregado.
Passo 2: Crie o seguinte atributo PRIVADO da classe: double salário-base;
Passo 3: Crie um construtor vazio
Passo 4: Crie os construtores parametrizados
Passo 5: Crie os métodos SET e GET
Passo 6: Modifique o método setSalarioBase para
public void setSalarioBase(double salarioBase) {
this.salarioBase = ( salarioBase < 0.0 ) ? 0.0 : salarioBase;
}
Passo 7: Adicione os métodos abaixo ao final da classe:
@Override
public double earnings() {
return getSalarioBase()+ super.earnings();
}
@Override
public String toString() {
return String.format("%s %s; %s: $%,.2f", "base-salaried", super.toString(), "base salary",
getSalarioBase());
}
6. _____________________________________
Página 6 de 6
6: Demonstrando o processamento polimórfico, o operador INSTANCEOF e o
DOWNCASTING
Passo 1: Clique com o botão direito sob o pacote da classe “br.com.tutorial2”. Selecione NOVO. Selecione CLASSE JAVA
PRINCIPAL. Dê a ela o nome de Teste.
Passo 2: Adicione o seguinte código dentro do método PUBLIC VOID MAIN STRING ARGS
SalarioEmpregado se = new SalarioEmpregado(800.00, "John", "Smith", "111-11-1111");
HorasEmpregado he = new HorasEmpregado(16.75, 40, "Karen", "Price", "222 -22-2222");
ComissaoEmpregado ce = new ComissaoEmpregado(10000, .06, "Sue", "Jones", "333-33-
3333");
BaseMaisComissao bc = new BaseMaisComissao(5000, .04, 300, "Bob", "Lewis", "444-44-
4444");
System.out.println(" n Processando: n");
System.out.printf(" n %sn%s: $%,.2fnn", se, "earned", se.earnings());
System.out.printf(" n %sn%s: $%,.2fnn", he, "earned", he.earnings());
System.out.printf(" n %sn%s: $%,.2fnn", ce, "earned", ce.earnings());
System.out.printf(" n %sn%s: $%,.2fnn", bc, "earned", bc.earnings());
Empregado[] e = new Empregado[4];
e[ 0] = se;
e[ 1] = he;
e[ 2] = ce;
e[ 3] = bc;
System.out.println(" n Usando Polimorfismo: n");
for (Empregado empregadoAtual : e) {
System.out.println(empregadoAtual);
if (empregadoAtual instanceof BaseMaisComissao) {
BaseMaisComissao bmc = (BaseMaisComissao) empregadoAtual;
bmc.setSalarioBase(1.10 * bmc.getSalarioBase());
System.out.printf(" n new base salary with 10%% increase is: $%,.2fn",
bmc.getSalarioBase());
}
System.out.printf(" n Ganhou: $%,.2fnn", empregadoAtual.earnings());
}
for (int j = 0; j < e.length; j++) {
System.out.printf(" n Empregado %d é um %sn", j, e[ j].getClass().getName());
}
Passo 3: Limpe e construa o projeto. Em seguida, mande executar.