Recapitulação - Hierarquia de Funcionários
Parte da seção Programação Orientada a Objetos do Journey de Java da Coddy — lição 27 de 87.
Desafio
FácilVamos construir um sistema completo de hierarquia de funcionários que reúne todos os conceitos de herança deste capítulo. Você criará uma estrutura de empresa onde diferentes tipos de funcionários compartilham atributos comuns, mas possuem seus próprios comportamentos especializados.
Você organizará seu código em quatro arquivos:
Employee.java: Crie a classe base que todos os funcionários compartilham. Todo funcionário tem um nome e um salário. Inclua um construtor que inicialize ambos os campos e um métodogetDetails()que retorna:[name] earns $[salary]. Também adicione um métodowork()que imprime:[name] is working.Manager.java: Crie uma classe que estende Employee. Os gerentes têm um campo adicionalteamSizerepresentando quantas pessoas eles gerenciam. Usesuperpara lidar com a inicialização do pai. Sobrescreva o métodowork()para imprimir:[name] is managing a team of [teamSize]. Adicione um métodogetManagerDetails()que retorna:Manager: [name] earns $[salary], Team size: [teamSize].Developer.java: Crie outra classe que estende Employee. Os desenvolvedores têm um campolanguagepara sua especialidade de programação. Novamente, usesuperpara a parte do pai. Sobrescrevawork()para imprimir:[name] is coding in [language]. Adicione um métodogetDeveloperDetails()que retorna:Developer: [name] earns $[salary], Language: [language].Main.java: Reúna tudo aqui. Você receberá cinco entradas: um nome de funcionário, salário, tamanho da equipe para o gerente, outro nome e uma linguagem de programação para o desenvolvedor. Crie um Manager e um Developer, então, para cada um, chame seu método de detalhes especializado seguido pelo seu métodowork().
Você receberá cinco entradas nesta ordem: nome do gerente (String), salário do gerente (double), tamanho da equipe (int), nome do desenvolvedor (String) e linguagem de programação (String). Use um salário de 75000.0 para o desenvolvedor.
Formate todos os valores de salário com 2 casas decimais usando String.format("%.2f", salary). Sua saída deve mostrar quatro linhas no total - os detalhes e o comportamento de trabalho do gerente, seguidos pelos detalhes e o comportamento de trabalho do desenvolvedor.
Experimente você mesmo
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Ler as entradas
String managerName = scanner.nextLine();
double managerSalary = scanner.nextDouble();
int teamSize = scanner.nextInt();
scanner.nextLine(); // consumir a quebra de linha
String developerName = scanner.nextLine();
String language = scanner.nextLine();
// O salário do desenvolvedor é fixado em 75000.0
double developerSalary = 75000.0;
// TODO: Criar um objeto Manager com managerName, managerSalary e teamSize
// TODO: Criar um objeto Developer com developerName, developerSalary e language
// TODO: Imprimir os detalhes do gerente usando getManagerDetails()
// TODO: Chamar o método work() do gerente
// TODO: Imprimir os detalhes do desenvolvedor usando getDeveloperDetails()
// TODO: Chamar o método work() do desenvolvedor
}
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosIntrodução à POOClasses vs ObjetosA Palavra-chave thisMétodosCampos (Atributos)Método ConstrutorSobrecarga de ConstrutorRecapitulação - Calculadora Simples4Herança
Herança Básica (extends)A Palavra-chave superSobrescrita de Método (@Override)Encadeamento de ConstrutoresA Classe ObjectHerança Simples e MultinívelPor que não há Herança Múltipla de ClassesRecapitulação - Hierarquia de Funcionários7Métodos Especiais e a Classe Object
Método toString()equals() e hashCode()Método clone()compareTo() e ComparableInterface ComparatorRecapitulação - Ordenação Personalizada2Modificadores de Acesso e Encapsulamento
Visão Geral dos Níveis de AcessoMétodos Getter e SetterOcultação de InformaçõesA Palavra-chave finalRecapitulação - Gerenciador de Conta Bancária5Polimorfismo
Fundamentos de Sobrecarga de MétodosSobrescrita de Métodos (Tempo de Execução)Upcasting e DowncastingO Operador instanceofClasses e Métodos AbstratosRecapitulação - Calculadora de Formas8Conceitos Avançados de OOP
Composição vs HerançaAgregação vs ComposiçãoClasses Internas, Aninhadas e AnônimasEnums e Métodos de EnumRecords (Java 16+)Classes Seladas (Java 17+)11Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão BuilderPadrão ObserverPadrão Strategy3Propriedades de Classe e Membros Estáticos
Variáveis de Instância vs EstáticasMétodos EstáticosBlocos EstáticosConstantes (static final)Recapitulação - Contador e Utilitário6Interfaces e Classes Abstratas
Introdução às InterfacesImplementando InterfacesImplementação de Múltiplas InterfacesDefault e Static em InterfacesClasses Abstratas vs InterfacesInterfaces FuncionaisRecapitulação - Sistema de Pagamento9Generics
Introdução a GenericsClasses GenéricasMétodos GenéricosParâmetros de Tipos DelimitadosWildcards (?, extends, super)Recapitulação - Container Genérico12Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão Iterator