• Nenhum resultado encontrado

103Todos os direitos reservados a 3Way Networks

No documento Linguagem Java COMPLETA (páginas 103-105)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 92

//static int i = 1;

//public static void main(String[] args) { } }

public static void main(String[] args) { System.out.println("Classe Topo"); }

}

Listagem 7.39 – Classes Internas e classes estáticas aninhadas

Note neste exemplo, que tanto a classe de mais alto nível (ClasseTopo, linha 1) e a sua classe aninhada

ClasseAninhadaEstatica (linha 4 ), possuem cada uma seu próprio método main(). Você pode usar cada classe de

forma independente, experimente executar as classes como segue: > java ClasseTopo

> java ClasseTopo\$ClasseAninhadaEstatica

Note neste exemplo, que como regra de sintaxe as classes internas não-estáticas (ClasseInterna, linha 12) não podem ter membros estáticos.

7.11.3 Classes internas locais

Classes internas locais (local inner classes) são aquelas que são definidas dentro de um bloco de método ou de um comando (statement). Vejamos o exemplo:

public class ClasseInternaLocal {

public static void main(String[] main) { class DentroDaMain {

public String toString() { return "DentroDaMain"; }

}

DentroDaMain ddm = new DentroDaMain();

// erro: nao é permitido classes aninhadas estáticas locais //static class EstaticaDentroDaMain { }

//erro: não é permitido qualquer modificador de acesso // private class PrivadaDentroDaMain { }

System.out.println(ddm); if (true) {

class DentroDoIf {

public String toString() { return "DentroDoIf"; }

}

DentroDoIf ddi = new DentroDoIf(); System.out.println(ddi);

}

//erro: fora do escopo do if

//DentroDoIf ddi1 = new DentroDoIf(); }

}

Listagem 7.40 – Local inner class

Neste exemplo, veja que é possível criar classes internas locais tanto dentro de um bloco de método (linha 3) ou dentro de um bloco de comando (linha 15). Note também que não é permitido criar classes estáticas locais, utilizando-se do modificador static. Também não é permitido utilizar modificadores de acesso - como public,

protected e private - à classes internas, somente é permitido utilizar o padrão - sem modificadores de acesso. Local inner classes

são classes definidas dentro de

um bloco de método.

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

7.11.4 Classes internas anônimas

Classes internas anônimas (anonymous inner classes) em geral aumentam bastante a complexidade de

entendimento de seu código, portanto deve ser utilizado de forma comedida ou em situações em que seu usa já seja esperado - por exemplo, em tratamento de eventos gráficos AWT. Vejamos o exemplo:

public class TesteClasseAnonima {

public static void main(String[] args) { class TesteDescendente extends Teste {

public String toString() {

return "TesteDescendente - filha de: " +

super.toString(); }

} // fim TesteDescendente

Teste t1 = new Teste();

Teste t2 = new TesteDescendente(); Teste t3;

t3 = new Teste() {

public String toString() {

return "Classe anonima - filha de: " + super.toString();

}; // fim toString()

}; // fim new Teste()

System.out.println("t1:" + t1 + "\nt2:" + t2 + "\nt3:" + t3);

} // fim main()

} // fim TesteClasseAnonima

class Teste {

public String toString() { return "Classe Teste";

} // fim main()

} // fim Teste

Listagem 7.41 – Classes Internas Anônimas

Na Listagem 7.41, a instância associada à variável t2 (linha 13), foi criada através da definição de uma classe interna denominada TesteDescendente (linha 5), que é filha da classe Teste (linha 27). De forma análoga, e com o mesmo efeito, foi criado uma nova definição de classe, porém sem utilizar nenhum nome novo, conforme podemos ver na declaração da variável t3 (linhas 15-19).

Simplesmente foi incluído um novo bloco que define a classe anônima após a chamada new Teste() (linha 15), com uma sobreposição do método toString() da classe pai Teste().

Como uma classe interna anônima não tem nome, não possível referenciá-la além do ponto de sua declaração, então, deve-se salvar sua referência no mesmo instante de sua definição.

7.11.5 Modificadores de acesso

Assim como outros membros, pode-se utilizar private, public ou protected na definição de classes aninhadas. Vejamos o exemplo:

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

105

No documento Linguagem Java COMPLETA (páginas 103-105)

Documentos relacionados