Declaração de Construtores em Java

Documentos relacionados
Classes e Objetos. Sintaxe de classe em Java

Linguagem de Programação III

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Programação Orientada a Objetos

Esta categoria mais geral, à qual cada objeto pertence, denominamos de classe; IFSC/POO + JAVA - prof. Herval Daminelli

Unidade: sobrecarga, construtores e herança

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

[Linguagem de Programação 3] [Aula 01] [Gustavo Yoshio Maruyama]

Encapsulamento e Métodos (Construtores e Estáticos) João Paulo Q. dos Santos

Programação Orientada a Objetos. Professor: André Luis Meneses Silva br.geocities.com/programacao2ufs

Notas de Aula 04: Herança e polimorfismo.

4 Conceito de Herança

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Herança. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Modificadores de acesso e atributos de classe

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Programação por Objectos. Java

AULA 2 VISÃO BÁSICA DE CLASSES EM PHP

Dados armazenados em um objeto podem ser tanto primitivos, tais como inteiros ou caracteres, ou referências para outros objetos.

Programação Avançada C++ Slide 12 Nielsen Castelo Damasceno

Paradigmas de Programação. Java First-Tier: Aplicações. Orientação a Objetos em Java (I) Nomenclatura. Paradigma OO. Nomenclatura

Computação II - Java - Teste 1.2 Prof. Adriano Joaquim de Oliveira Cruz 2015/04/27

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Programação OO em Java. Profa Andréa Schwertner Charão DELC/CT/UFSM

Linguagem de Programação III

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

Universidade da Beira Interior Cursos: Engenharia Informática, Matemática /Informática e Ensino da Informática

Programação Orientada a Objectos - P. Prata, P. Fazendeiro. Hierarquia de classes e mecanismo de ligação

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Programação Java (nível intermediário) 4. Polimorfismo

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Programação Orientada a Objetos II

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Classes e Encapsulamento

Prof. Rogério Albuquerque de Almeida. Programação Orientada a Objetos II Java Terceira aula

Programação Java. - Herança e Polimorfismo - Marco Fagundes Marco Fagundes -

Programação Orientada a Objetos Aula I Declaração de classes, métodos construtores. Prof.: Bruno E. G. Gomes IFRN

Programação Orientada a Objetos

Introdução. Extends e Super. Exercício Prático 5 Herança. Nome:

Orientação a Objetos - Herança

Modificadores de Acesso JAVA

Orientação a objetos. Programação. Orientada a Objetos. Orientação a objetos. Orientação a objetos. Abstração e encapsulamento

Laboratório de programação II

Implementando classes em C# Curso Técnico Integrado em Informática Fundamentos de Programação

Linguagem de Programação IV Introdução

Classe Abstrata e Interface

Palavras Reservadas da Linguagem Java

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Análise de Programação

Programação Orientada a Objetos. Aula 1.9 this e static. Prof. Bruno Moreno

Classes, Métodos e Propriedades

A B Classe Genérica D A C. Classe Especializada. Classe Especializada. Características Herdadas

Herança e Propriedades

Programação Orientada a Objetos JAVA - NETBEANS

Conceitos de Programação Orientada a Objetos

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan Prof a. Rachel Reis

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

AULA 8 Polimorfismo de: coerção, overloading, inclusão e paramétrico Prof. Dr. Fernando Henrique Campos

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

ORIENTAÇÃO A OBJETOS SISTEMAS DE INFORMAÇÃO DR. EDNALDO B. PIZZOLATO

Aprendendo. Java 2. Rodrigo Mello Ramon Chiara Renato Villela. Novatec Editora Ltda.

String. Demonstrar a utilização e manipulação com os métodos da classe String.

Programação Orientada a Objetos. Métodos e Atributos. Métodos. Métodos. Alexandre César Muniz de Oliveira. Parte III

Programação Orientada a Objetos

PCS3111. Laboratório de Programação Orientada a Objetos para Engenharia Elétrica. Aula 6: Polimorfismo

Introdução ao Java. Prof. Herbert Rausch Fernandes

POO29004 Programação Orientada a Objetos

Lição 11 Herança, polimorfismo e interfaces

Array em Java. Figura 1 - Exemplo de um array de inteiros

p Pacotes, a grosso modo, são apenas pastas ou diretórios do sistema operacional onde ficam armazenados os arquivos fonte de Java.

Especificam quem tem acesso a cada entidade, isto é, quem tem acesso a. cada classe e cada membro da classe (dados e métodos)

Transcrição:

Programando com Java Artigo http://mballem.wordpress.com/ Declaração de Construtores em Java Para que serve e como usar um Construtor em Java Autor Marcio Ballem: é formado em Sistemas de Informação e possui certificação Oracle Certified Professional, Java SE 6 Programmer. Trabalhou profissionalmente com desenvolvimento em Delphi 7 e Java JEE. Introdução Já faz algum tempo que vejo principalmente em fóruns, novos usuários na linguagem Java que não compreendem a funcionalidade de um construtor. Acabam por exemplo, criando um construtor com argumentos (talvez com a ajuda de alguma IDE) e tentam acessar a classe através de uma instância utilizando o construtor default, e sem ao menos ele ter sido criado. Neste artigo irei explicar e exemplificar algumas formas de se usar os construtores e como fazer para chamá-los através da instância de classe. O método construtor é muito semelhante a um método comum, porém ele se difere dos demais métodos por alguns pontos bem específicos e importantes para a linguagem Java. Em primeiro lugar o método construtor deve possuir o mesmo nome da classe, sendo assim, é o único método por padrão Java Bean que será nomeado com a primeira letra em maiúscula. Outro ponto importante é que um construtor nunca terá um tipo de retorno, poderá ser do tipo private, public, protected ou default, mas nunca terá um tipo de retorno nem que ele seja do tipo void. Os construtores também não poderão ser marcados como static, final ou abstract. Todas as classes devem possuir pelo menos um construtor, inclusive as classes abstratas. Outro fato importante é que todo construtor possui de forma implícita uma chamada a super classe a qual pertence, e caso se faça essa chamada de forma explicita, o super() deve ser sempre a primeira declaração do método construtor, como no exemplo da listagem 2. Se qualquer uma destas regras forem infringidas a compilação resultará em um erro. 1. Classe sem construtor explicito Vou criar uma classe na listagem 1, onde não precisarei declarar explicitamente um construtor padrão. Listagem 1. Classe sem construtor explicito //getters and setters Animal animal = new Animal(); animal.setpeso(5.5); animal.setgrupo("mamiferos"); Conforme o padrão Java Bean (boas práticas da linguagem Java), toda classe deve iniciar com letra maiúscula e as demais letras devem ser em minúsculas. Sendo um nome composto, deve-se utilizar por padrão a primeira letra das demais palavras em maiúsculas e sem espaço entre as palavras.

O que aconteceu? Foi criada uma classe chamada de Animal e foram criadas duas variáveis de instância, peso e grupo. No método main, criei uma variável de referência animal, do tipo Animal e atribui a ela um objeto do tipo Animal. Quando eu fiz new Animal(), aqui eu mandei construir um objeto do tipo Animal e atribuí-lo a variável de referencia criada. Mesmo não tendo criado um construtor explicitamente esse código não gera nenhum erro de compilação ou de execução. Agora, se eu quisesse declarar outro construtor, que possuísse como argumento o peso e o grupo, conforme listagem 2, eu precisaria então obrigatoriamente declarar o construtor padrão para utilizá-lo, senão ocorreria um erro de compilação referente a linha que possui new Animal(). Sempre que um construtor com argumentos for declarado, o compilador não ira criar o construtor padrão, então devemos criá-lo explicitamente caso precisemos utilizá-lo. 2. Classe com construtor explicito Criando dois construtores na classe Animal, um padrão e outro com lista de argumentos. Listagem 2. Classe com construtor explicito //default this.peso = peso; this.grupo = grupo; Animal animal = new Animal(); animal.setpeso(5.5); animal.setgrupo("mamiferos"); Animal b = new Animal(6.0, "Aves"); Foram declarados dois construtores, o primeiro com o comentário default, vai possibilitar a criação do objeto animal e o segundo ira possibilitar a criação do objeto b. O segundo construtor, o com argumentos, nos possibilita criar um objeto e inserir neste objeto valores em tempo de criação, sem precisar utilizar o método set para este propósito. A chamada a super() é um padrão implícito em qualquer construtor, não precisa ser feita, mas caso seja utilizada, ela deve ser a primeira declaração dentro do construtor. Podemos criar quantos construtores quisermos em uma única classe, mas sempre respeitando as regras de sobrecarga (http://pt.wikipedia.org/wiki/sobrecarga). Podemos também, por exemplo, fazer uma chamada ao construtor padrão a partir do construtor sobrecarregado, como na listagem 3.

Listagem 3. Classe com construtor explicito System.out.println("Construtor Padrão"); this.peso = peso; this.grupo = grupo; Animal b = new Animal(6.0, "Aves"); Agora a execução irá chamar o construtor com argumentos e executará o this(), assim, será feita uma chamada ao construtor padrão e será impressa a String Construtor Padrão, e então a execução voltara para o construtor com os argumentos e executara as demais linhas dele. Quando o this() for usado, não deve ser usado o super() no construtor que declaramos a chamada a this(), por que a chamada a super() será executada pelo ultimo construtor chamado. Não é possivel ter no mesmo construtor uma chamada a super() e uma chamada a this(), se isso ocorrer será gerado um erro de compilação. O this() sempre fará uma chamada ao construtor da própria classe, enquanto o super fará a chamada ao construtor da super classe. 3. Construtor com Herança Quando trabalhamos com herança em Java usamos a palavra chave extends para referenciar qual classe será herdada. Como já foi dito anteriormente, sempre que uma classe é instanciada seu construtor é chamado e a primeira execução dentro do construtor é uma chamada a super(), que chama o construtor da sua super classe e assim consecutivamente. Vejamos um exemplo na tabela 1: 4. public Object() { 3. Chama public Object() { 2. public Dog() { Chama 1. Dog dog = new Dog() Chama public Dog() { Tabela 1 Passos executados na Herança Conforme a tabela 1, a classe Dog que é herança da classe Animal, assim, quando executamos uma instância da classe Dog, teremos os seguintes passos: 1. A execução da instância faz uma chamada ao construtor de Dog;

2. Quando o construtor de Dog é executado ele faz uma chamada a super(), que é o construtor da classe Animal; 3. Então o construtor da classe Animal é executado e faz uma chamada a super(), neste exemplo, o super() referencia a classe Object. Object é a classe mãe de todas as classes em Java, todas classes herdam Object de forma implícita. 4. O construtor da classe Object é executado e então os passos voltam ordenadamente do passo 4 para o passo 1. Listagem 4. Utilizando Herança System.out.println("Construtor de Animal"); this.peso = peso; this.grupo = grupo; public class Dog extends Animal { private String raca; private String porte; public Dog() { System.out.println("Construtor de Dog"); Dog dog = new Dog(); Conforme a listagem 4, a execução do código ira imprimir na tela a frase Construtor de Animal e na próxima linha a frase Construtor de Dog. Isso acontece por que quando a pilha de chamadas chega em Object, ela começa a regredir, desempilhar, e então, passa a executar as linhas seguintes a super() em cada um dos construtores. Esse é dos motivos por que precisamos sempre declarar um construtor padrão ou um construtor sem argumentos quando estamos trabalhando com herança e possuímos também na classe, construtores com argumentos. Listagem 5. Utilizando Herança parte 2

System.out.println("Construtor de Animal"); System.out.println("Construtor sobrecarregado de Animal"); public class Dog extends Animal { private String raca; private String porte; public Dog() { super(5.6, "Mamiferos"); System.out.println("Construtor de Dog"); public Dog(String raca, String porte) { System.out.println("Construtor sobrecarregado de Dog"); Dog dog = new Dog("Vira Lata", "Médio"); Executando o código da listagem 5, vamos ter um resultado diferente, isso porque foi criado um construtor sobrecarregado na classe Dog e a instância da classe Dog é feita por ele. A seguinte ordem será executada quando este código rodar: 1. Uma chamada ao construtor sobrecarregado de Dog; 2. O construtor sobrecarregado é executado e faz uma chamada ao construtor padrão de Dog através do 3. O construtor padrão de Dog é executado e faz uma chamada ao construtor sobrecarregado de Animal através do super sobrecarregado, super(5.6, "Mamiferos"); 4. O construtor sobrecarregado de Animal é executado e então faz uma chamada a seu construtor padrão através do 5. O construtor padrão de Animal é executado e faz uma chamada a Object através do 6. O construtor de object é executado. Após o item 6 ser executado, a pilha de chamadas começa a ser desfeita até chegar no item 1. 5. Escreve na tela a frase: Construtor de Animal 4. Escreve na tela a frase: Construtor sobrecarregado de Animal 3. Escreve na tela a frase: Construtor de Dog 2. Escreve na tela a frase: Construtor sobrecarregado de Dog

1. Termina a execução voltando ao método main Conclusão Vimos algumas regras essenciais para criação de construtores na linguagem Java. Também vimos como utilizá-los através da instancia de classe e chamadas por this(), a construtores da própria classe, e super(), a construtores das super classes. Os construtores são a forma de acesso de uma classe a outra, por isso são tão importantes na linguagem Java.