Baixe o app para aproveitar ainda mais
Prévia do material em texto
Thiago Rodrigues POO 1 Métodos Sobrecarregados • Objetivo: determinar vários significados para um mesmo identificador de função/método sobre do mesmo escopo. • Requisito: as funções devem diferir no tipo e/ou quantidade de parâmetros; public void set(int idade); public void set(String nome); public void set(String nome, int idade) • O compilador escolherá a versão correta a partir dos parâmetros utilizados na chamada do método; Thiago Rodrigues POO 2 public class JOverload { private String nome; private int idade; public void set(int i) { idade = i;} public void set(String n){ nome = n;} public void set(String n, int i){ nome = n; idade = i; } public int getIdade() { return idade;} public String getNome() { return nome;} } public class JMain { public static void main(String [] args){ JOverload obj; obj = new JOverload(); obj.set(10); obj.set("Thiago"); obj.set("Thiago", 20); } } Thiago Rodrigues POO 3 Ambigüidade • Ocorre que uma invocação de método pode se referir à dois ou mais métodos implementados; • No Java, quando acorre ambiguidade é exibido um erro de compilação; package PCK; public class JAmbiguity { public void Sub(int x, float y){ System.out.println("Sub com param int e float!!"); } public void Sub(float x, int y){ System.out.println("Sub com param float e int!!"); } } import PCK.*; public class JMain { public static void main (String []args){ JAmbiguity objeto = new JAmbiguity(); objeto.Sub(10.3F, 5); objeto.Sub(13, 7.5F); objeto.Sub(10, 5); } } Thiago Rodrigues POO 4 Construtores public class JTeste { String nome; int idade; public JTeste(String n, int i){ nome = n; idade = i; } public JTeste (String n){ nome = n; } } JTeste obj; obj = new JTeste(“Edeuclécio”,20); JTeste obj2; obj2 = new JTeste(“Edeuclécio”); .... • Além do construtor padrão presente em todas as classes, o programador pode definir seus próprios construtores; • possuem o mesmo nome das respectivas classes; • similares a métodos, mas não têm tipo de retorno; • pode haver mais de um por classe (overloading) Thiago Rodrigues POO 5 Destrutores • Java realiza a coleta de lixo automática da memória; • Quando um objeto não é mais utilizado ele é marcado para a coleta de lixo; • Cada classe pode ter seu próprio finalizador, que será chamado pelo coletor de lixo antes do objeto ser desalocado; • Deve-se chamar finalize(), sem nenhum parâmetro e nenhum valor de retorno; public class JTeste { String nome; int idade; void finalize () { System.out.println(“fim”); } } ... System.gc(); .... Thiago Rodrigues POO 6 Faça uma classe JEscola com os seguintes atributos e métodos: :: Nome da escola :: Qtd alunos :: Qtd de Professores; :: Mensalidade :: Salário :: Construtor para inicializar o parâmetro Nome da Escola :: Métodos Get a Set para cada atributo :: método para calcular o lucro da escola; Thiago Rodrigues POO 7 package PCK; public class JEscola { private String Nome_Escola; private int Qtd_Profs; private int Qtd_Alunos; private float Mensalidade; private float Salario; public JEscola(String nome){ Nome_Escola = nome; } public float lucro(){ return (Qtd_Alunos * Mensalidade)-(Qtd_Profs * Salario); } Thiago Rodrigues POO 8 public float getMensalidade() { return Mensalidade; } public void setMensalidade(float M) { Mensalidade = M; } public int getQtd_Alunos() { return Qtd_Alunos; } public void setQtd_Alunos(int Alunos) { Qtd_Alunos = Alunos; } public int getQtd_Profs() { return Qtd_Profs; } public void setQtd_Profs(int Profs) { Qtd_Profs = Profs; } public float getSalario() { return Salario; } public void setSalario(float Sal) { Salario = Sal; } } Thiago Rodrigues POO 9 import PCK.JEscola; public class Principal { public static void main(String[] args) { JEscola escola = new JEscola("PCII School"); escola.setQtd_Alunos(3000); escola.setMensalidade(600.00f); escola.setQtd_Profs(200); escola.setSalario(6000.00f); System.out.println("Lucro: " + escola.lucro()); } } Thiago Rodrigues POO 10 Passagem de Parâmetros em Java • Normalmente LP disponibilizam dois tipos de passagem de parâmetros; • Valor x Referência; • Entretanto, Java só disponibiliza passagem de parâmetros por valor; public class JClasse { private void x_2(int aux){ aux = aux * 2; } public void Pc() { int valor = 5; this.x_2(valor); } } 5 FF012 5 AC461 valor aux Thiago Rodrigues POO 11 class JDado{ private int idade; private String String; public int getIdade() { return idade;} public void setIdade(int idade) { this.idade = idade;} public String getString(){ return String;} public void setString(String string){ String = string;} } public class JClasse { private JDado obj; public void Cria(){ obj = new JDado(); obj.setString("Edeuclécio"); obj.setIdade(15);} private void oper(JDado aux){ aux.setIdade(aux.getIdade() + 1); ... } } aux BA326 FF012 obj Edeuclécio 15 BA326 BA326 DF501
Compartilhar