Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Aula 03 SobreCarga Sobrecarga de Métodos Neste capítulo vamos apresentar a sobrecarga de métodos, o uso de métodos com o mesmo nome, mas parâmetros diferentes. O que é a sobrecarga de métodos? Sobrecarga de métodos se refere ao uso de métodos com mesmo nome, mas com tipos de parâmetros ou número de parâmetros diferentes. Isto é, o nome do método é o mesmo, mas os tipos de parâmetros são diferentes. De um modo geral como os métodos sobrecarregados têm o mesmo nome, eles realizam basicamente a mesma tarefa, a diferença é o número de parâmetros e ou o tipo dos parâmetros que são recebidos. Exemplos de sobrecarga O exemplo a seguir declara métodos com o mesmo nome, métodos sobrecarregados. Exemplo: public void metodoA(int x, int y); // 1-int,int public void metodoA(float x, float y); // 2-float,float public void metodoA(int x, float y); // 3-int,float O compilador reconhece qual método você quer acessar verificando o tipo dos parâmetros e o número de parâmetros. Mudar o nome dos parâmetros não é uma sobrecarga, o compilador diferencia o tipo e a quantidade de parâmetros não o nome e sim pela sua assinatura. Exemplo de Sobrecarga package programas; import entity.Numeros; public class ExemploSobreCarga { public static void main(String[] args) { Numeros exemplo = new Numeros(); System.out.print("===== Exemplo de Sobrecarga de Metodo ====="); System.out.print("\n"); System.out.print("Primeiro Metodo: 2 parametro "); exemplo.imprime(1,2); System.out.print("\nSegundo Metodo : 3 parametro "); exemplo.imprime(1,2,3); System.out.print("\nTerceiro Metodo: 4 parametro "); exemplo.imprime(1,2,3,4); } } package entity; public class Numeros { public int num1; 2 public int num2; public int num3; public int num4; public Numeros() {} public void imprime(int a, int b){ num1 = a; num2 = b; System.out.print (num1 + " " + num2 ); } public void imprime(int x, int f, int s){ num1 = x; num2 = f; num3 = s; System.out.print (num1 + " " + num2 + " " + num3 ); } public void imprime(int m, int n, int o, int p){ num1 = m; num2 = n; num3 = o; num4 = p; System.out.print (num1 + " " + num2 + " " + num3 + " " + num4 ); } } Interfaces Interface é um recurso da orientação a objeto utilizado em Java que define ações que devem ser obrigatoriamente executadas, mas que cada classe pode executar de forma diferente. Interfaces contém valores constantes ou assinaturas de métodos que devem ser implementados dentro de uma classe. E por que isso? Isso se deve ao fato que muitos objetos (classes) podem possuir a mesma ação (método), porém, podem executá-la de maneira diferente. Usando um exemplo bem drástico, podemos ter uma interface chamada aéreo que possui a assinatura do método voar(). Ou seja, toda classe que implementar aéreo deve dizer como voar(). Portanto, se eu tenho uma classe chamada pássaro e outra chamada avião, ambas implementando a interface aéreo, então, nestas duas classes devemos codificar a forma como cada um irá voar(). Uma interface é criada da mesma forma que uma classe, mas utilizando a palavra-chave interface no lugar declass. interface nomeDaInterface { métodoAbstrato (argumentos); } 3 Usando uma Interface em uma Classe Como vimos anteriormente, uma classe pode extender suas funcionalidades obtendo as características de outra classe num processo que chamamos de herança. Uma interface não é herdada, mas sim, implementada. Porque todo o código dos métodos da interface deve ser escrito dentro da classe que o chama. Dessa forma, obtemos as assinaturas dos métodos da interface em uma classe usando a palavra- chave implements. A vantagem principal das interfaces é que não há limites de quantas interfaces uma classe pode implementar. O que ajuda no caso de heranças múltiplas que não é possível ser feito em Java, pois uma classe apenas pode herdar as características de uma outra classe. Resumindo Uma interface em Java é uma espécie de classe, com as seguintes propriedades: Não pode ser instanciável (não podemos criar objetos com new); Só pode possuir assinaturas de métodos de instância, públicos e abstratos (sem corpo). Não pode possuir métodos concretos (com corpo), nem métodos estáticos. Os prefixos abstract e public podem ser usados, mas são em geral omitidos; Não pode conter variáveis de instância ou de classe (static); Pode conter declarações de constantes (com prefixo final e inicializadas para um valor) – nesse caso essa variável funcionará como uma constante de classe. O prefixo static possa ser usado, mas é em geral omitido; Pode ser criada como subinterface de outra interface já existente, usando extends, como as classes. Para criar interfaces usamos uma sintaxe parecida com a das classes, substituindo a palavra class por interface: Exemplo1: package entity; public interface FolhaPagamento { final float PERCINSS = 8.5f; final float PERCIRRF = 3.5f; public void calculaInss(); public void calculaIrrf(); public void calculaSalarioLiquido(); } 4 package programas; import entity.FolhaPagamento; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.JLabel; import javax.swing.JTextField; public class CalculoContraCheque extends JFrame implements FolhaPagamento { private JLabel lblSalario; private JLabel lblInss; private JLabel lblImpostoRenda; private JLabel lblSalarioLiquido; private JTextField txtSalario; private JTextField txtInss; private JTextField txtImpostoRenda; private JTextField txtSalarioLiquido; private JButton btnCalcula; public float vlrSalario; public float vlrInss; public float vlrIrrf; public float vlrSalarioLiquido; public CalculoContraCheque() { setSize(500, 300); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } 5 public void montaTela() { Container painel = getContentPane(); painel.setLayout(null); lblSalario = new JLabel("Salario:"); txtSalario = new JTextField(20); lblSalario.setBounds(50, 40, 100, 20);//coluna, linha, largura, altura txtSalario.setBounds(150, 40, 200, 25);//coluna, linha, largura, altura lblInss = new JLabel("Inss:"); txtInss = new JTextField(5); txtInss.setEditable(false); lblInss.setBounds(50, 70, 100, 20);//coluna, linha, largura, altura txtInss.setBounds(150, 70, 200, 25);//coluna, linha, largura, altura lblImpostoRenda = new JLabel("Imposto Renda:"); txtImpostoRenda = new JTextField(5); txtImpostoRenda.setEditable(false); lblImpostoRenda.setBounds(50, 100, 100, 20);//coluna, linha, largura, altura txtImpostoRenda.setBounds(150, 100, 200, 25);//coluna, linha, largura, altura lblSalarioLiquido= new JLabel("Salário Líquido:"); txtSalarioLiquido = new JTextField(5); txtSalarioLiquido.setEditable(false); lblSalarioLiquido.setBounds(50, 130, 100, 20);//coluna, linha, largura, altura txtSalarioLiquido.setBounds(150, 130, 200, 25);//coluna, linha, largura, altura btnCalcula = new JButton("Calcular"); btnCalcula.setBounds(190, 200, 100, 20);//coluna, linha, largura, altura painel.add(lblSalario); painel.add(txtSalario); painel.add(lblInss); painel.add(txtInss); painel.add(lblImpostoRenda); painel.add(txtImpostoRenda); painel.add(lblSalarioLiquido); painel.add(txtSalarioLiquido); painel.add(btnCalcula); btnCalcula.addActionListener(new CalculaContraCheque()); } public static void main(String[] args) { CalculoContraCheque calculo = new CalculoContraCheque(); calculo.montaTela(); } } 6 Exemplo2: package entity; public interface FolhaPagamentoII { final float DESCONTOPADRAOIRRF = 10f; final float PERCIRRF = 3.5f; public void calculaSalario(); public void calculaInss(); public void calculaIrrf(); public void calculaSalarioLiquido(); } package programas; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; 7 import javax.swing.JButton; import javax.swing.JFrame; import static javax.swing.JFrame.EXIT_ON_CLOSE; import javax.swing.JLabel; import javax.swing.JTextField; public class CalculoContraChequeII extends JFrame { private JLabel lblSalario; private JLabel lblVendas; private JLabel lblQtdeHoras; private JLabel lblTipoFolha; private JTextField txtSalario; private JTextField txtVendas; private JTextField txtQtdeHoras; private JTextField txtTipoFolha; private JButton btnCalcula; public float vlrSalario; public float vlrVendas; public float vlrIrrf; int qtdeHoras; int tipoFolha; public CalculoContraChequeII() { setSize(500, 300); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } public void montaTela() { Container painel = getContentPane(); painel.setLayout(null); lblSalario = new JLabel("Salario:"); txtSalario = new JTextField(20); lblSalario.setBounds(50, 40, 100, 20);//coluna, linha, largura, altura txtSalario.setBounds(150, 40, 200, 25);//coluna, linha, largura, altura lblVendas = new JLabel("Vendas:"); txtVendas = new JTextField(5); lblVendas.setBounds(50, 70, 100, 20);//coluna, linha, largura, altura txtVendas.setBounds(150, 70, 200, 25);//coluna, linha, largura, altura lblQtdeHoras = new JLabel("Qtde Horas:"); txtQtdeHoras = new JTextField(5); lblQtdeHoras.setBounds(50, 100, 100, 20);//coluna, linha, largura, altura txtQtdeHoras.setBounds(150, 100, 200, 25);//coluna, linha, largura, altura lblTipoFolha = new JLabel("Tipo Folha:"); txtTipoFolha = new JTextField(5); lblTipoFolha.setBounds(50, 130, 100, 20);//coluna, linha, largura, altura txtTipoFolha.setBounds(150, 130, 200, 25);//coluna, linha, largura, altura btnCalcula = new JButton("Calcular"); 8 btnCalcula.setBounds(190, 200, 100, 20);//coluna, linha, largura, altura painel.add(lblSalario); painel.add(txtSalario); painel.add(lblVendas); painel.add(txtVendas); painel.add(lblQtdeHoras); painel.add(txtQtdeHoras); painel.add(lblTipoFolha); painel.add(txtTipoFolha); painel.add(btnCalcula); btnCalcula.addActionListener(new SelecionaCalculo()); } public class SelecionaCalculo implements ActionListener { @Override public void actionPerformed(ActionEvent e) { tipoFolha = Integer.parseInt(txtTipoFolha.getText()); vlrSalario = Float.parseFloat(txtSalario.getText()); vlrVendas = Float.parseFloat(txtVendas.getText()); qtdeHoras = Integer.parseInt(txtQtdeHoras.getText()); if (tipoFolha == 1) { CalculoProfessor prof = new CalculoProfessor(25.55f, qtdeHoras); prof.calculaSalario(); } else if (tipoFolha == 2) { CalculoVendedor vend = new CalculoVendedor(vlrSalario, vlrVendas); vend.calculaSalario(); } } } public static void main(String[] args) { CalculoContraChequeII calculo = new CalculoContraChequeII(); calculo.montaTela(); } } package programas; import entity.FolhaPagamentoII; import javax.swing.JOptionPane; public class CalculoProfessor implements FolhaPagamentoII { } package programas; 9 import entity.FolhaPagamentoII; import javax.swing.JOptionPane; public class CalculoVendedor implements FolhaPagamentoII { }
Compartilhar