SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
SCJP 6
  Clase 8 – Inner Classes




    Ezequiel Aranda
Sun Microsystems Campus
      Ambassador
Disclaimer & Acknowledgments
> Even though Ezequiel Aranda is a full-time employee of Sun
  Microsystems, the contents here are created as his own
  personal endeavor and thus does not reflect any official
  stance of Sun Microsystems.
> Sun Microsystems is not responsible for any inaccuracies in
  the contents.
> Acknowledgments – The slides of this presentation are made
  from “SCJP Unit 8” by Warit Wanwithu and Thanisa
  Kruawaisayawan and SCJP Workshop by P. Srikanth.
> This slides are Licensed under a Creative Commons
  Attribution – Noncommercial – Share Alike 3.0
   > http://creativecommons.org/licenses/by-nc-sa/3.0/
AGENDA

>  enerics Vs. Arrays
 G
>  lases internas
 C
  >  lases internas “regulares”
   C
  >  lases internas locales a un método
   C
  >  lases internas anónimas
   C
  >  lases estáticas anidadas
   C
Generics Vs. Arrays

                  Animal

             <<abs>> checkup()




Bird               Cat           Dog 
Generics Vs. Arrays (II)
  public void checkAnimals(ArrayList<Animal>
    animals){
      for(Animal a : animals) {
          a.checkup();
      }
  }
  doc.checkAnimals(dogs);    // dogs: List<Dog>
  doc.checkAnimals(cats);    // cats: List<Cat>
  doc.checkAnimals(birds); // birds: List<Bird>

>  Porqué no funciona?
 ¿
>  Cómo solucionarlo?
 ¿
Generics Vs. Arrays (III)
  Animal[] animals = new Animal[3];
  animals[0] = new Cat();
  animals[1] = new Dog();
  List<Animal> animals = new
    ArrayList<Animal>();
  animals.add(new Cat());    // OK
  animals.add(new Dog());    // OK

>  sto funciona con ambos, Arrays y Generics.
 E
Generics Vs. Arrays (IV)


>  unciona siempre:
 F
  public void addAnimal(Animal[] animals) {
  animals[0] = new Dog(); Animal[]
  }

>  unciona a veces:
 F
  public void addAnimal(ArrayList<Animal>
    animals) {
  animals.add(new Dog());
  }
Generics Vs. Arrays (V)

>  a razón por la cual es peligroso pasar como
 L
 parámetro una colección de un subtipo es
 porque podríamos agregar algo erróneo en la
 colección (o en el Array).
Generics Vs. Arrays (VI)
  public void foo() {
  Dog[] dogs = {new Dog(), new Dog()};
    addAnimal(dogs);
  }
  public void addAnimal(Animal[] animals) {
  animals[0] = new Dog();
  }

>  sto funciona perfectamente, y es correcto.
 E
Generics Vs. Arrays (VII)
  public void foo() {
  Cat[] cats = {new Cat(), new Cat()};
    addAnimal(cats);
  }
  public void addAnimal(Animal[] animals) {
  animals[0] = new Dog();
  }

>  cabamos de poner un gato en un Array de
 A
 perros.
Generics Vs. Arrays (VIII)

>  in embargo, y a diferencia que realizando
 S
 el mismo ejemplo con colecciones
 parametrizadas, el código anterior, compila
>  o que permite que compile es la existencia
 L
 de la excepción ArrayStoreException, que
 previene que se de el problema visto
 anteriormente en tiempo de ejecución.
Generics Vs. Arrays (IX)

>  ero no existe un equivalente
 P
 a esta excepción para
 colecciones, debido a que las
 parametrizaciones se eliminan
 en tiempo de ejecución.
>  s decir, la JVM conoce el tipo de los Arrays
 E
 en tiempo de ejecución, pero no el tipo de
 una colección.
Codificando una inner class “regular”

>  lamamos regulares a las clases internas que
 L
 no son:
  >  státicas
   E
  >  ocales a un método
   L
  >  nónimas
   A
>  na inner class regular no puede tener
 U
 declaraciones estáticas de ningún tipo
>  a única forma de acceder a la clase interna
 L
 es a través de una instancia de la clase
 externa.
class MyOuter {
      private int x = 7;
      class MyInner {
      public void seeOuter() {
        System.out.println(quot;Outer x is
        quot; + x); }}
  }
>  ste código es perfectamente legal. Nótese
 E
 que la clase interna esta accediendo a un
 miembro privado de la clase externa. Esto es
 correcto, dado que la clase interna es un
 miembro de la clase externa también.
Instanciando una clase interna
>  esde el interior de la clase externa:
 D
  MyInner mi = new MyInner();
>  esde el exterior de la clase externa
 D
 (incluyendo código de métodos estáticos
 dentro de la clase externa):
  MyOuter.MyInner
>  ara instanciar un objeto de la clase interna
 P
 debemos usar una referencia a la clase
 externa:
  obj = new MyOuter().new MyInner();
    u outerObjRef.new MyInner();
this

>  this” es una referencia al objeto que esta en
 “
 ejecución actualmente.
  public void myMethod() {
      MyClass mc = new MyClass();
      mc.doStuff(this);
  }
Haciendo referencia a la instancia de la clase
      interna/ externa desde la clase interna
class MyOuter {
    private int x = 7;
    class MyInner {
     public void seeOuter() {
         System.out.println(quot;Outer x is quot;+ x);
         System.out.println(quot;Inner class ref is
         ” + this);
         System.out.println(quot;Outer class ref is
         ” + MyOuter.this);
     }
    }
}
Clases internas locales a un método
class MyOuter2 {
    private String x = quot;Outer2quot;;
    void doStuff() {
     class MyInner {
     public void seeOuter() {
         System.out.println(quot;Outer x is quot; + x);
     }
    }
    MyInner mi = new MyInner();
    mi.seeOuter(); }
}
Que puede y que no puede hacer una clase
           local a un método
>  efiniendo una clase interna dentro de un
 D
 método, solo podremos crear objetos de esa
 clase dentro del método.
>  uede ser una clase abstracta.
 P
>  o puede tener métodos o atributos estáticos
 N
 salvo que la clase interna sea estática
 también.
Que puede y que no puede hacer una
    clase local a un método (II)
>  uede acceder a las variables de la clase
 P
 externa.
>  o puede acceder a las variables locales al
 N
 método.
  >  alvo que sean declaradas “final”
   S
>  os únicos modificadores que podemos
 L
 aplicar a una clase interna local a un método
 son “abstract” y “final”.
  >  omo siempre, no podemos aplicar los dos al
   C
   mismo tiempo.
Que puede y que no puede hacer una
    clase local a un método (III)
class MyOuter2 {
  private String x = quot;Outer2quot;;
  void doStuff() {
   String z = quot;local variablequot;;
   class MyInner {
      public void seeOuter() {
          System.out.println(quot;Outer x is quot; + x);
          System.out.println(quot;Local variable z
          isquot;+ z);
// Esto no compila. Dado que se accede a z desde la
  clase interna, z debe ser declarada final.
} } } }
Clases internas anónimas
   class Popcorn {
     public void pop() {
       System.out.println(quot;popcornquot;);
     }
   }
   class Food {
     Popcorn p = new Popcorn() {
       public void pop() {
          System.out.println(quot;anonymous popcornquot;);
       }
     }; // debe colocarse un punto y coma aquí
   }
> La variable p no hace referencia a una instancia de
  Popcorn, sino a una instancia de una subclase
  anónima de Popcorn.
class Popcorn {
  public void pop() {
    System.out.println(quot;popcornquot;);
  }
}
  class Food {
    Popcorn p = new Popcorn() {
       public void sizzle() {
          System.out.println(quot;anonymous sizzling
          popcornquot;);
       }
       public void pop() {
          System.out.println(quot;anonymous popcornquot;);
       }
    };
    public void popIt() {
       p.pop(); // OK
       p.sizzle(); //KO    ¿Porqué no funciona?
    }}
Clases internas anónimas:
         implementando una interfaz
interface Cookable {
    public void cook();
}
class Food {
    Cookable c = new Cookable() {
     public void cook() {
         System.out.println(quot;anonymous cookable
         implementerquot;);
     }
  }; Nota: no existe un mecanismo para implementar mas
}    de una interfaz de esta forma
class MyWonderfulClass {    Clases internas anónimas:
   void go() {                  clases definidas en
     Bar b = new Bar();             argumentos
     b.doStuff(new Foo() {
        public void foof() {
           System.out.println(quot;foofyquot;);
        } // fin foof
     }); //fin inner class y declaración del método
   } // fin go()
} // fin class
interface Foo {
   void foof();
}
class Bar {
   void doStuff(Foo f) { }
}
Clases estáticas anidadas
class BigOuter {
  static class Nest {
    void go(){System.out.println(quot;hiquot;); } }
}
class Broom {
  static class B2 {
    void goB2(){System.out.println(quot;hi 2quot;); }
  }
  public static void main(String[] args) {
    BigOuter.Nest n = new BigOuter.Nest();
    n.go();
    B2 b2 = new B2();
    b2.goB2(); }}
Clases estáticas anidadas (II)

> Las clases no son exactamente “estáticas”. No existe
  tal cosa.
> En este caso el modificador “static” indica que la
  clase interna es un miembro estático de la clase
  externa.
> Esto quiere decir que podemos acceder al mismo sin
  la necesidad de crear una instancia de la clase
  externa.
> No puede acceder a los miembros de la clase
  externa de la misma forma que lo haría una clase
  interna (exceptuando a los estáticos, claro está).
Preguntas

Mais conteúdo relacionado

Mais procurados

Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Ronald Cuello
 
Introducción a Java Persistence API
Introducción a Java Persistence APIIntroducción a Java Persistence API
Introducción a Java Persistence APIJose Martinez
 
Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosjubacalo
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql ServerCorfapo
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Robert Wolf
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Ronald Cuello
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datosjubacalo
 
Leccion 04 plataforma java operadores especiales prototipos paso por refere...
Leccion 04   plataforma java operadores especiales prototipos paso por refere...Leccion 04   plataforma java operadores especiales prototipos paso por refere...
Leccion 04 plataforma java operadores especiales prototipos paso por refere...letm
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2xjordi
 

Mais procurados (20)

Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)
 
Resumen java
Resumen javaResumen java
Resumen java
 
Clase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScriptClase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScript
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Clase 6 objetos de javaScript
Clase 6 objetos de javaScriptClase 6 objetos de javaScript
Clase 6 objetos de javaScript
 
Introducción a Java Persistence API
Introducción a Java Persistence APIIntroducción a Java Persistence API
Introducción a Java Persistence API
 
Programa Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viverosPrograma Java que gestiona los productos que comercializan varios viveros
Programa Java que gestiona los productos que comercializan varios viveros
 
7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server7090112 Clase Transact Sql Server
7090112 Clase Transact Sql Server
 
Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4Manuales seminario java-manualdejava-sem 3 - 4
Manuales seminario java-manualdejava-sem 3 - 4
 
Java Persistence Api (Jpa)
Java Persistence Api (Jpa)Java Persistence Api (Jpa)
Java Persistence Api (Jpa)
 
Semana 1 Estructuras de Datos en Java
Semana 1   Estructuras de Datos en JavaSemana 1   Estructuras de Datos en Java
Semana 1 Estructuras de Datos en Java
 
JPA en Netbeans
JPA en NetbeansJPA en Netbeans
JPA en Netbeans
 
Java::Acceso a Bases de Datos
Java::Acceso a Bases de DatosJava::Acceso a Bases de Datos
Java::Acceso a Bases de Datos
 
Semana 1 Estructuras de Control en Java
Semana 1   Estructuras de Control en JavaSemana 1   Estructuras de Control en Java
Semana 1 Estructuras de Control en Java
 
Por pagar
Por pagarPor pagar
Por pagar
 
Programas en netbeans
Programas en netbeansProgramas en netbeans
Programas en netbeans
 
Leccion 04 plataforma java operadores especiales prototipos paso por refere...
Leccion 04   plataforma java operadores especiales prototipos paso por refere...Leccion 04   plataforma java operadores especiales prototipos paso por refere...
Leccion 04 plataforma java operadores especiales prototipos paso por refere...
 
Guia 12 js
Guia 12 jsGuia 12 js
Guia 12 js
 
Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2Introducción a la Progamación en Javascript. Classe 2
Introducción a la Progamación en Javascript. Classe 2
 
Programación Java
Programación JavaProgramación Java
Programación Java
 

Destaque

De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutosflekoso
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threadsflekoso
 
Cultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y AlcancesCultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y Alcancesflekoso
 
Introducción a JavaFX
Introducción a JavaFXIntroducción a JavaFX
Introducción a JavaFXflekoso
 
SCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/OSCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/Oflekoso
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friendflekoso
 
JavaFX 1.2 - Introducción
JavaFX 1.2 - IntroducciónJavaFX 1.2 - Introducción
JavaFX 1.2 - Introducciónflekoso
 
Índice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordÍndice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordTelefónica
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Javaflekoso
 

Destaque (9)

De 0 A Python En 40 Minutos
De 0 A Python En 40 MinutosDe 0 A Python En 40 Minutos
De 0 A Python En 40 Minutos
 
SCJP, Clase 9: Threads
SCJP, Clase 9: ThreadsSCJP, Clase 9: Threads
SCJP, Clase 9: Threads
 
Cultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y AlcancesCultura Libre: Origenes, Definiciones y Alcances
Cultura Libre: Origenes, Definiciones y Alcances
 
Introducción a JavaFX
Introducción a JavaFXIntroducción a JavaFX
Introducción a JavaFX
 
SCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/OSCJP, Clase 10: Strings, I/O
SCJP, Clase 10: Strings, I/O
 
Ruby: a Programmer's best friend
Ruby: a Programmer's best friendRuby: a Programmer's best friend
Ruby: a Programmer's best friend
 
JavaFX 1.2 - Introducción
JavaFX 1.2 - IntroducciónJavaFX 1.2 - Introducción
JavaFX 1.2 - Introducción
 
Índice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWordÍndice Libro "macOS Hacking" de 0xWord
Índice Libro "macOS Hacking" de 0xWord
 
Introducción a la Programación con Java
Introducción a la Programación con JavaIntroducción a la Programación con Java
Introducción a la Programación con Java
 

Semelhante a SCJP, Clase 8: Inner Classes

Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclassesjorg_marq
 
Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009mtemarialuisa
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUGJordi Gerona
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2climancc
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - TrovitJordi Gerona
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)Videoconferencias UTPL
 
Expo_Int
Expo_IntExpo_Int
Expo_IntRogDer
 
Taller de programación clase #3
Taller de programación   clase #3Taller de programación   clase #3
Taller de programación clase #3Juan Cardona
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxFamiliaAyluardo
 
Android Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG UruguayAndroid Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG Uruguaygtuguruguay
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesecodereck
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo vGiovanny Guillen
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con phpFer Nando
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujojorg_marq
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Axel
 

Semelhante a SCJP, Clase 8: Inner Classes (20)

Clase8 innerclasses
Clase8 innerclassesClase8 innerclasses
Clase8 innerclasses
 
Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009
 
Unit Testing - GTUG
Unit Testing - GTUGUnit Testing - GTUG
Unit Testing - GTUG
 
P R A C T I C A2
P R A C T I C A2P R A C T I C A2
P R A C T I C A2
 
Unit Testing - Trovit
Unit Testing - TrovitUnit Testing - Trovit
Unit Testing - Trovit
 
Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0Clase 21 programacion ejb 3.0
Clase 21 programacion ejb 3.0
 
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
UTPL-PROGRAMACIÓN AVANZADA-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2012)
 
Expo_Int
Expo_IntExpo_Int
Expo_Int
 
Taller de programación clase #3
Taller de programación   clase #3Taller de programación   clase #3
Taller de programación clase #3
 
JAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptxJAVA_BASICO_modo_consola_introduccion.pptx
JAVA_BASICO_modo_consola_introduccion.pptx
 
Java
JavaJava
Java
 
Android Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG UruguayAndroid Bootcamp - GTUG Uruguay
Android Bootcamp - GTUG Uruguay
 
Hola mundo
Hola mundoHola mundo
Hola mundo
 
Sesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clasesSesion 07 nivel_acceso_miembros_clases
Sesion 07 nivel_acceso_miembros_clases
 
Curso java desde cero nivel i - modulo v
Curso java desde cero   nivel i - modulo vCurso java desde cero   nivel i - modulo v
Curso java desde cero nivel i - modulo v
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Clase5 controldeflujo
Clase5 controldeflujoClase5 controldeflujo
Clase5 controldeflujo
 
Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2Poo 2009 u2_introd_a_la_poo_2
Poo 2009 u2_introd_a_la_poo_2
 
9.herencia en java
9.herencia en java9.herencia en java
9.herencia en java
 
AGENDA
AGENDAAGENDA
AGENDA
 

Último

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 

Último (10)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 

SCJP, Clase 8: Inner Classes

  • 1. SCJP 6 Clase 8 – Inner Classes Ezequiel Aranda Sun Microsystems Campus Ambassador
  • 2. Disclaimer & Acknowledgments > Even though Ezequiel Aranda is a full-time employee of Sun Microsystems, the contents here are created as his own personal endeavor and thus does not reflect any official stance of Sun Microsystems. > Sun Microsystems is not responsible for any inaccuracies in the contents. > Acknowledgments – The slides of this presentation are made from “SCJP Unit 8” by Warit Wanwithu and Thanisa Kruawaisayawan and SCJP Workshop by P. Srikanth. > This slides are Licensed under a Creative Commons Attribution – Noncommercial – Share Alike 3.0 > http://creativecommons.org/licenses/by-nc-sa/3.0/
  • 3. AGENDA >  enerics Vs. Arrays G >  lases internas C >  lases internas “regulares” C >  lases internas locales a un método C >  lases internas anónimas C >  lases estáticas anidadas C
  • 4. Generics Vs. Arrays Animal <<abs>> checkup() Bird  Cat  Dog 
  • 5. Generics Vs. Arrays (II) public void checkAnimals(ArrayList<Animal> animals){ for(Animal a : animals) { a.checkup(); } } doc.checkAnimals(dogs); // dogs: List<Dog> doc.checkAnimals(cats); // cats: List<Cat> doc.checkAnimals(birds); // birds: List<Bird> >  Porqué no funciona? ¿ >  Cómo solucionarlo? ¿
  • 6. Generics Vs. Arrays (III) Animal[] animals = new Animal[3]; animals[0] = new Cat(); animals[1] = new Dog(); List<Animal> animals = new ArrayList<Animal>(); animals.add(new Cat()); // OK animals.add(new Dog()); // OK >  sto funciona con ambos, Arrays y Generics. E
  • 7. Generics Vs. Arrays (IV) >  unciona siempre: F public void addAnimal(Animal[] animals) { animals[0] = new Dog(); Animal[] } >  unciona a veces: F public void addAnimal(ArrayList<Animal> animals) { animals.add(new Dog()); }
  • 8. Generics Vs. Arrays (V) >  a razón por la cual es peligroso pasar como L parámetro una colección de un subtipo es porque podríamos agregar algo erróneo en la colección (o en el Array).
  • 9. Generics Vs. Arrays (VI) public void foo() { Dog[] dogs = {new Dog(), new Dog()}; addAnimal(dogs); } public void addAnimal(Animal[] animals) { animals[0] = new Dog(); } >  sto funciona perfectamente, y es correcto. E
  • 10. Generics Vs. Arrays (VII) public void foo() { Cat[] cats = {new Cat(), new Cat()}; addAnimal(cats); } public void addAnimal(Animal[] animals) { animals[0] = new Dog(); } >  cabamos de poner un gato en un Array de A perros.
  • 11. Generics Vs. Arrays (VIII) >  in embargo, y a diferencia que realizando S el mismo ejemplo con colecciones parametrizadas, el código anterior, compila >  o que permite que compile es la existencia L de la excepción ArrayStoreException, que previene que se de el problema visto anteriormente en tiempo de ejecución.
  • 12. Generics Vs. Arrays (IX) >  ero no existe un equivalente P a esta excepción para colecciones, debido a que las parametrizaciones se eliminan en tiempo de ejecución. >  s decir, la JVM conoce el tipo de los Arrays E en tiempo de ejecución, pero no el tipo de una colección.
  • 13. Codificando una inner class “regular” >  lamamos regulares a las clases internas que L no son: >  státicas E >  ocales a un método L >  nónimas A >  na inner class regular no puede tener U declaraciones estáticas de ningún tipo >  a única forma de acceder a la clase interna L es a través de una instancia de la clase externa.
  • 14. class MyOuter { private int x = 7; class MyInner { public void seeOuter() { System.out.println(quot;Outer x is quot; + x); }} } >  ste código es perfectamente legal. Nótese E que la clase interna esta accediendo a un miembro privado de la clase externa. Esto es correcto, dado que la clase interna es un miembro de la clase externa también.
  • 15. Instanciando una clase interna >  esde el interior de la clase externa: D MyInner mi = new MyInner(); >  esde el exterior de la clase externa D (incluyendo código de métodos estáticos dentro de la clase externa): MyOuter.MyInner >  ara instanciar un objeto de la clase interna P debemos usar una referencia a la clase externa: obj = new MyOuter().new MyInner(); u outerObjRef.new MyInner();
  • 16. this >  this” es una referencia al objeto que esta en “ ejecución actualmente. public void myMethod() { MyClass mc = new MyClass(); mc.doStuff(this); }
  • 17. Haciendo referencia a la instancia de la clase interna/ externa desde la clase interna class MyOuter { private int x = 7; class MyInner { public void seeOuter() { System.out.println(quot;Outer x is quot;+ x); System.out.println(quot;Inner class ref is ” + this); System.out.println(quot;Outer class ref is ” + MyOuter.this); } } }
  • 18. Clases internas locales a un método class MyOuter2 { private String x = quot;Outer2quot;; void doStuff() { class MyInner { public void seeOuter() { System.out.println(quot;Outer x is quot; + x); } } MyInner mi = new MyInner(); mi.seeOuter(); } }
  • 19. Que puede y que no puede hacer una clase local a un método >  efiniendo una clase interna dentro de un D método, solo podremos crear objetos de esa clase dentro del método. >  uede ser una clase abstracta. P >  o puede tener métodos o atributos estáticos N salvo que la clase interna sea estática también.
  • 20. Que puede y que no puede hacer una clase local a un método (II) >  uede acceder a las variables de la clase P externa. >  o puede acceder a las variables locales al N método. >  alvo que sean declaradas “final” S >  os únicos modificadores que podemos L aplicar a una clase interna local a un método son “abstract” y “final”. >  omo siempre, no podemos aplicar los dos al C mismo tiempo.
  • 21. Que puede y que no puede hacer una clase local a un método (III) class MyOuter2 { private String x = quot;Outer2quot;; void doStuff() { String z = quot;local variablequot;; class MyInner { public void seeOuter() { System.out.println(quot;Outer x is quot; + x); System.out.println(quot;Local variable z isquot;+ z); // Esto no compila. Dado que se accede a z desde la clase interna, z debe ser declarada final. } } } }
  • 22. Clases internas anónimas class Popcorn { public void pop() { System.out.println(quot;popcornquot;); } } class Food { Popcorn p = new Popcorn() { public void pop() { System.out.println(quot;anonymous popcornquot;); } }; // debe colocarse un punto y coma aquí } > La variable p no hace referencia a una instancia de Popcorn, sino a una instancia de una subclase anónima de Popcorn.
  • 23. class Popcorn { public void pop() { System.out.println(quot;popcornquot;); } } class Food { Popcorn p = new Popcorn() { public void sizzle() { System.out.println(quot;anonymous sizzling popcornquot;); } public void pop() { System.out.println(quot;anonymous popcornquot;); } }; public void popIt() { p.pop(); // OK p.sizzle(); //KO ¿Porqué no funciona? }}
  • 24. Clases internas anónimas: implementando una interfaz interface Cookable { public void cook(); } class Food { Cookable c = new Cookable() { public void cook() { System.out.println(quot;anonymous cookable implementerquot;); } }; Nota: no existe un mecanismo para implementar mas } de una interfaz de esta forma
  • 25. class MyWonderfulClass { Clases internas anónimas: void go() { clases definidas en Bar b = new Bar(); argumentos b.doStuff(new Foo() { public void foof() { System.out.println(quot;foofyquot;); } // fin foof }); //fin inner class y declaración del método } // fin go() } // fin class interface Foo { void foof(); } class Bar { void doStuff(Foo f) { } }
  • 26. Clases estáticas anidadas class BigOuter { static class Nest { void go(){System.out.println(quot;hiquot;); } } } class Broom { static class B2 { void goB2(){System.out.println(quot;hi 2quot;); } } public static void main(String[] args) { BigOuter.Nest n = new BigOuter.Nest(); n.go(); B2 b2 = new B2(); b2.goB2(); }}
  • 27. Clases estáticas anidadas (II) > Las clases no son exactamente “estáticas”. No existe tal cosa. > En este caso el modificador “static” indica que la clase interna es un miembro estático de la clase externa. > Esto quiere decir que podemos acceder al mismo sin la necesidad de crear una instancia de la clase externa. > No puede acceder a los miembros de la clase externa de la misma forma que lo haría una clase interna (exceptuando a los estáticos, claro está).