SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
Java 2 Standard Edition

Classes internas
Helder da Rocha
www.argonavis.com.br

1
Classes internas
Classes podem ser membros de classes, de objetos ou locais
a métodos. Podem até serem criadas sem nome, apenas com
corpo no momento em que instanciam um objeto
Há poucas situações onde classes internas podem ou devem
ser usadas. Devido à complexidade do código que as utiliza,
deve-se evitar usos não convencionais
Usos típicos incluem tratamento de eventos em GUIs,
criação de threads, manipulação de coleções e soquetes
Classes internas podem ser classificadas em quatro tipos
Classes dentro de instruções (classes anônimas)
Classes dentro de métodos (classes locais)
Classes dentro de objetos (membros de instância)
Classes internas estáticas (membros de classe)
2
Tipos de classes internas
São sempre classes dentro de classes. Exemplo:
class Externa {
private class Interna {
public int campo;
public void metodoInterno() {...}
}
public void metodoExterno() {...}
}

Podem ser private, protected, public ou package-private
Exceto as que aparecem dentro de métodos, que são locais

Podem ser estáticas:

E chamadas usando a notação Externa.Interna

Podem ser de instância, e depender da existência de objetos:
Externa e = new Externa();
Externa.Interna ei = e.new Externa.Interna();

Podem ser locais (dentro de métodos)
E nas suas instruções podem não ter nome (anônimas)

3
Classes estáticas (internal classes)
Declaradas como static
Idênticas às classes externas, mas não têm campos static
Classe externa age como um pacote para várias classes internas
estáticas: Externa.Coisa, Externa.InternaUm
Compilador gera arquivo Externa$InternaUm.class
class Externa {
private static class InternaUm {
public int campo;
public void metodoInterno() {...}
}
public static class InternaDois
extends InternaUm {
public int campo2;
public void metodoInterno() {...}
}
public static interface Coisa {
void existe();
}
public void metodoExterno() {...}
}

4
Classes de instância (embedded classes)
São membros do objeto, como métodos e campos de dados
Requerem que objeto exista antes que possam ser usadas.
Externamente use referencia.new para criar objetos

Variáveis de mesmo nome sempre se referem à classe externa
Use NomeDaClasse.this para acessar campos internos

class Externa {
public int campoUm;
private class Interna {
public int campoUm;
public int campoDois;
public void metodoInterno() {
this.campoUm = 10; // Externa.campoUm
Interna.this.campoUm = 15;
}
}
public static void main(String[] args){
Interna e = (new Externa()).new Interna();
}
}

5
Classes dentro de métodos (embedded)
Servem para tarefas "descartáveis" já que deixam de existir
quando o método acaba
Têm o escopo de variáveis locais. Objetos criados, porém, podem
persistir além do escopo do método, se retornados
Se usa variáveis locais do método essas variáveis devem ser
constantes (declaradas final), pois assim podem persistir após a
conclusão do método.
public Multiplicavel calcular(final int a, final int b) {
class Interna implements Multiplicavel {
public int produto() {
return a * b; // usa a e b, que são constantes
}
}
return new Interna();
}
public static void main(String[] args){
Multiplicavel mul = (new Externa()).calcular(3,4);
int prod = mul.produto();
}

6
Classes anônimas (dentro de instruções)
Classes usadas dentro de métodos freqüentemente servem
apenas para criar um objeto uma única vez
A classe abaixo estende ou implementa SuperClasse, que pode ser
uma interface ou classe abstrata (o new, neste caso, indica a
criação da classe entre chaves, não da SuperClasse)
Object i = new SuperClasse() { implementação };
Compilador gera arquivo Externa$1.class, Externa$2.class,

...
public Multiplicavel calcular(final int a, final int b) {
return new Multiplicavel() {
Compare com parte em
public int produto() {
preto e vermelho do
return a * b;
}
slide anterior!
A classe está dentro da instrução:
};
preste atenção no ponto-e-vírgula!
}
public static void main(String[] args){
Multiplicavel mul = (new Externa()).calcular(3,4);
int prod = mul.produto();
}

7
Para que servem classes internas?
Mais reutilização
Recurso poderoso quando combinado com interfaces e
herança - facilita implementação de delegação: tipo de
herança de implementação que combinando composição
com herança de interfaces (simula herança múltipla)
"Ponteiros seguros" apontando para métodos localizados
em classes internas
Flexibilidade para desenvolver objetos descartáveis

Riscos
Aumenta significativamente a complexidade do código
Dificulta o trabalho de depuração (erros de compilador
são mais confusos em classes internas)

Evite fugir do convencional ao usar classes internas
8
Como delegação simula herança múltipla
ClasseConcretaUm

Efeito
Desejado

metodoUm()
metodoDois()
metodoTres()

ClasseConcretaDois
metodoCinco()
metodoQuatro()

(não permitido em Java)
ClasseDerivada
ClasseConcretaUm
metodoUm()
metodoDois()
metodoTres()

«interface»

InterfaceUm
metodoCinco()
metodoQuatro()

ClasseDerivada

ClasseConcretaDois

deleg:ClasseConcretaUm
metodoQuatro()
metodoCinco()

Efeito Possível
em Java

deleg

metodoCinco()
metodoQuatro()

deleg.metodoQuatro()

Classes existentes
Classes novas

9
Exercícios
1. Escreva uma aplicação que chame o método
imprimir() de cada uma das classes do arquivo
Internas.java (cap15)
2. Implemente a classe InMethod de Internas.java
como uma classe anônima.

10
Curso J100: Java 2 Standard Edition
Revisão 17.0

© 1996-2003, Helder da Rocha
(helder@acm.org)

argonavis.com.br
11

Weitere ähnliche Inhalte

Was ist angesagt?

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: SincronizadoresHelder da Rocha
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETLeonardo Melo Santos
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVACristiano Almeida
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsHelder da Rocha
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosLeonardo Melo Santos
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasHelder da Rocha
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreadingArmando Daniel
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)Helder da Rocha
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaHelder da Rocha
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIFabio Moura Pereira
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IFabio Moura Pereira
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de ArquivosArthur Emanuel
 

Was ist angesagt? (17)

Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Threads 07: Sincronizadores
Threads 07: SincronizadoresThreads 07: Sincronizadores
Threads 07: Sincronizadores
 
Curso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NETCurso de OO com C# - Parte 03 - Plataforma .NET
Curso de OO com C# - Parte 03 - Plataforma .NET
 
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVAProgramação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
 
Threads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threadsThreads 02: Acesso exclusivo e comunicação entre threads
Threads 02: Acesso exclusivo e comunicação entre threads
 
Curso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetosCurso de OO com C# - Parte 01 - Orientação a objetos
Curso de OO com C# - Parte 01 - Orientação a objetos
 
Threads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticasThreads 03: Ciclo de vida, aplicações e boas práticas
Threads 03: Ciclo de vida, aplicações e boas práticas
 
Java recursos avançados - multithreading
Java   recursos avançados - multithreadingJava   recursos avançados - multithreading
Java recursos avançados - multithreading
 
Atualização Java 8 (2014)
Atualização Java 8 (2014)Atualização Java 8 (2014)
Atualização Java 8 (2014)
 
Java 06
Java 06Java 06
Java 06
 
Aula05
Aula05Aula05
Aula05
 
Java7
Java7Java7
Java7
 
Threads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão MútuaThreads 05: Travas de Exclusão Mútua
Threads 05: Travas de Exclusão Mútua
 
Python Orientação a Objeto
Python Orientação a ObjetoPython Orientação a Objeto
Python Orientação a Objeto
 
Programação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte IIProgramação Concorrente - Gerenciamento de Threads - Parte II
Programação Concorrente - Gerenciamento de Threads - Parte II
 
Programação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte IProgramação Concorrente - Gerenciamento de Threads - Parte I
Programação Concorrente - Gerenciamento de Threads - Parte I
 
Java: Manipulação de Arquivos
Java:  Manipulação  de ArquivosJava:  Manipulação  de Arquivos
Java: Manipulação de Arquivos
 

Andere mochten auch

Um Esforço Combinado Na Padronização
Um Esforço Combinado Na PadronizaçãoUm Esforço Combinado Na Padronização
Um Esforço Combinado Na Padronizaçãowallyvianna
 
Httpunit - Teste de interface Web com HttpUnit
Httpunit - Teste de interface Web com HttpUnitHttpunit - Teste de interface Web com HttpUnit
Httpunit - Teste de interface Web com HttpUnitDenis L Presciliano
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteDenis L Presciliano
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsDenis L Presciliano
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsDenis L Presciliano
 

Andere mochten auch (9)

Um Esforço Combinado Na Padronização
Um Esforço Combinado Na PadronizaçãoUm Esforço Combinado Na Padronização
Um Esforço Combinado Na Padronização
 
Httpunit - Teste de interface Web com HttpUnit
Httpunit - Teste de interface Web com HttpUnitHttpunit - Teste de interface Web com HttpUnit
Httpunit - Teste de interface Web com HttpUnit
 
Fundamentos de JDBC
Fundamentos de JDBCFundamentos de JDBC
Fundamentos de JDBC
 
Entrada e Saída
Entrada e SaídaEntrada e Saída
Entrada e Saída
 
Funcamentos de Programação Concorrente
Funcamentos de Programação ConcorrenteFuncamentos de Programação Concorrente
Funcamentos de Programação Concorrente
 
Coleções Propriedade, Resources e Strings
Coleções Propriedade, Resources e StringsColeções Propriedade, Resources e Strings
Coleções Propriedade, Resources e Strings
 
Como construir aplicações gráficas e applets
Como construir aplicações gráficas e appletsComo construir aplicações gráficas e applets
Como construir aplicações gráficas e applets
 
Funmentos de Objetos Remotos
Funmentos de Objetos RemotosFunmentos de Objetos Remotos
Funmentos de Objetos Remotos
 
Teste de Software
Teste de SoftwareTeste de Software
Teste de Software
 

Ähnlich wie Classes internas em Java

Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e ComposiçãoDenis L Presciliano
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Javadanrleywillian1
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classesCarlos Melo
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/Rodrigo Vieira
 
[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas
[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas
[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimasLoiane Groner
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosGeorge Mendonça
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoMarconi Rodrigues
 

Ähnlich wie Classes internas em Java (20)

Java11
Java11Java11
Java11
 
Classes Internas
Classes InternasClasses Internas
Classes Internas
 
v
vv
v
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Reuso com Herança e Composição
Reuso com Herança e ComposiçãoReuso com Herança e Composição
Reuso com Herança e Composição
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Orientação a Objetos
Orientação a ObjetosOrientação a Objetos
Orientação a Objetos
 
Classes Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções JavaClasses Anônimas, Internas e Coleções Java
Classes Anônimas, Internas e Coleções Java
 
Classes Internas
Classes InternasClasses Internas
Classes Internas
 
3- POO
3- POO3- POO
3- POO
 
Poo
PooPoo
Poo
 
Linguagem de programação implementação de classes
Linguagem de programação   implementação de classesLinguagem de programação   implementação de classes
Linguagem de programação implementação de classes
 
Curso Java Basico
Curso Java BasicoCurso Java Basico
Curso Java Basico
 
http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/http://www.dm.ufscar.br/~waldeck/curso/java/
http://www.dm.ufscar.br/~waldeck/curso/java/
 
Java primeiros-passos
Java primeiros-passosJava primeiros-passos
Java primeiros-passos
 
Aula4
Aula4Aula4
Aula4
 
[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas
[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas
[Curso Java Basico] Aula 64: Classes aninhadas: internas, locais e anonimas
 
Classes e Objectos JAVA
Classes e Objectos JAVAClasses e Objectos JAVA
Classes e Objectos JAVA
 
PHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e ObjetosPHP 5.3 - Classes e Objetos
PHP 5.3 - Classes e Objetos
 
Introdução a programação Orientada a Objeto
Introdução a programação Orientada a ObjetoIntrodução a programação Orientada a Objeto
Introdução a programação Orientada a Objeto
 

Mehr von Denis L Presciliano

Mehr von Denis L Presciliano (20)

Testes de Unidade com JUnit
Testes de Unidade com JUnitTestes de Unidade com JUnit
Testes de Unidade com JUnit
 
Erros, exceções e asserções
Erros, exceções e asserçõesErros, exceções e asserções
Erros, exceções e asserções
 
Interfaces e Porlimosfismo
Interfaces e PorlimosfismoInterfaces e Porlimosfismo
Interfaces e Porlimosfismo
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Pacotes e Encapsulamento
Pacotes e EncapsulamentoPacotes e Encapsulamento
Pacotes e Encapsulamento
 
Como criar classes e objetos
Como criar classes e objetosComo criar classes e objetos
Como criar classes e objetos
 
Tipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxoTipos, literais, operadoes e controle de fluxo
Tipos, literais, operadoes e controle de fluxo
 
Como usar a documentação da API Java 2
Como usar a documentação da API Java 2Como usar a documentação da API Java 2
Como usar a documentação da API Java 2
 
Configuração do ambiente JEdit + Ant
Configuração do ambiente JEdit + AntConfiguração do ambiente JEdit + Ant
Configuração do ambiente JEdit + Ant
 
Programação Orientada a objetos em Java
Programação Orientada a objetos em JavaProgramação Orientada a objetos em Java
Programação Orientada a objetos em Java
 
Introdução a tecnologia Java
Introdução a tecnologia JavaIntrodução a tecnologia Java
Introdução a tecnologia Java
 
Fundamentos de Sockets
Fundamentos de SocketsFundamentos de Sockets
Fundamentos de Sockets
 
J530 15 workshop
J530 15 workshopJ530 15 workshop
J530 15 workshop
 
J530 14 xdoclet
J530 14 xdocletJ530 14 xdoclet
J530 14 xdoclet
 
Autenticação e Controle de Acesso
Autenticação e Controle de AcessoAutenticação e Controle de Acesso
Autenticação e Controle de Acesso
 
J530 12 transactions
J530 12 transactionsJ530 12 transactions
J530 12 transactions
 
J530 11 relationships
J530 11 relationshipsJ530 11 relationships
J530 11 relationships
 
J530 10 mdb
J530 10 mdbJ530 10 mdb
J530 10 mdb
 
J530 9 jms
J530 9 jmsJ530 9 jms
J530 9 jms
 
J530 8 cmp
J530 8 cmpJ530 8 cmp
J530 8 cmp
 

Classes internas em Java

  • 1. Java 2 Standard Edition Classes internas Helder da Rocha www.argonavis.com.br 1
  • 2. Classes internas Classes podem ser membros de classes, de objetos ou locais a métodos. Podem até serem criadas sem nome, apenas com corpo no momento em que instanciam um objeto Há poucas situações onde classes internas podem ou devem ser usadas. Devido à complexidade do código que as utiliza, deve-se evitar usos não convencionais Usos típicos incluem tratamento de eventos em GUIs, criação de threads, manipulação de coleções e soquetes Classes internas podem ser classificadas em quatro tipos Classes dentro de instruções (classes anônimas) Classes dentro de métodos (classes locais) Classes dentro de objetos (membros de instância) Classes internas estáticas (membros de classe) 2
  • 3. Tipos de classes internas São sempre classes dentro de classes. Exemplo: class Externa { private class Interna { public int campo; public void metodoInterno() {...} } public void metodoExterno() {...} } Podem ser private, protected, public ou package-private Exceto as que aparecem dentro de métodos, que são locais Podem ser estáticas: E chamadas usando a notação Externa.Interna Podem ser de instância, e depender da existência de objetos: Externa e = new Externa(); Externa.Interna ei = e.new Externa.Interna(); Podem ser locais (dentro de métodos) E nas suas instruções podem não ter nome (anônimas) 3
  • 4. Classes estáticas (internal classes) Declaradas como static Idênticas às classes externas, mas não têm campos static Classe externa age como um pacote para várias classes internas estáticas: Externa.Coisa, Externa.InternaUm Compilador gera arquivo Externa$InternaUm.class class Externa { private static class InternaUm { public int campo; public void metodoInterno() {...} } public static class InternaDois extends InternaUm { public int campo2; public void metodoInterno() {...} } public static interface Coisa { void existe(); } public void metodoExterno() {...} } 4
  • 5. Classes de instância (embedded classes) São membros do objeto, como métodos e campos de dados Requerem que objeto exista antes que possam ser usadas. Externamente use referencia.new para criar objetos Variáveis de mesmo nome sempre se referem à classe externa Use NomeDaClasse.this para acessar campos internos class Externa { public int campoUm; private class Interna { public int campoUm; public int campoDois; public void metodoInterno() { this.campoUm = 10; // Externa.campoUm Interna.this.campoUm = 15; } } public static void main(String[] args){ Interna e = (new Externa()).new Interna(); } } 5
  • 6. Classes dentro de métodos (embedded) Servem para tarefas "descartáveis" já que deixam de existir quando o método acaba Têm o escopo de variáveis locais. Objetos criados, porém, podem persistir além do escopo do método, se retornados Se usa variáveis locais do método essas variáveis devem ser constantes (declaradas final), pois assim podem persistir após a conclusão do método. public Multiplicavel calcular(final int a, final int b) { class Interna implements Multiplicavel { public int produto() { return a * b; // usa a e b, que são constantes } } return new Interna(); } public static void main(String[] args){ Multiplicavel mul = (new Externa()).calcular(3,4); int prod = mul.produto(); } 6
  • 7. Classes anônimas (dentro de instruções) Classes usadas dentro de métodos freqüentemente servem apenas para criar um objeto uma única vez A classe abaixo estende ou implementa SuperClasse, que pode ser uma interface ou classe abstrata (o new, neste caso, indica a criação da classe entre chaves, não da SuperClasse) Object i = new SuperClasse() { implementação }; Compilador gera arquivo Externa$1.class, Externa$2.class, ... public Multiplicavel calcular(final int a, final int b) { return new Multiplicavel() { Compare com parte em public int produto() { preto e vermelho do return a * b; } slide anterior! A classe está dentro da instrução: }; preste atenção no ponto-e-vírgula! } public static void main(String[] args){ Multiplicavel mul = (new Externa()).calcular(3,4); int prod = mul.produto(); } 7
  • 8. Para que servem classes internas? Mais reutilização Recurso poderoso quando combinado com interfaces e herança - facilita implementação de delegação: tipo de herança de implementação que combinando composição com herança de interfaces (simula herança múltipla) "Ponteiros seguros" apontando para métodos localizados em classes internas Flexibilidade para desenvolver objetos descartáveis Riscos Aumenta significativamente a complexidade do código Dificulta o trabalho de depuração (erros de compilador são mais confusos em classes internas) Evite fugir do convencional ao usar classes internas 8
  • 9. Como delegação simula herança múltipla ClasseConcretaUm Efeito Desejado metodoUm() metodoDois() metodoTres() ClasseConcretaDois metodoCinco() metodoQuatro() (não permitido em Java) ClasseDerivada ClasseConcretaUm metodoUm() metodoDois() metodoTres() «interface» InterfaceUm metodoCinco() metodoQuatro() ClasseDerivada ClasseConcretaDois deleg:ClasseConcretaUm metodoQuatro() metodoCinco() Efeito Possível em Java deleg metodoCinco() metodoQuatro() deleg.metodoQuatro() Classes existentes Classes novas 9
  • 10. Exercícios 1. Escreva uma aplicação que chame o método imprimir() de cada uma das classes do arquivo Internas.java (cap15) 2. Implemente a classe InMethod de Internas.java como uma classe anônima. 10
  • 11. Curso J100: Java 2 Standard Edition Revisão 17.0 © 1996-2003, Helder da Rocha (helder@acm.org) argonavis.com.br 11