Inner classes CAPITULO 8
Por favor no descomentar el codigo hasta segunda order. Gracias por su compresion.
Regular inner classes Inner classes que no son: Static Method-Local Anonymous Las inner clases pueden ver todos los metodos y atributos de la clase exterior inclusive aquellos marcados como private.
Regular Inner classes Las clases Inner no pueden tener ningun tipo de declaracion “Static” por lo tanto no pueden ejecutar el metodo main.
Instanciando una InnerClass Regla general: Para acceder a una inner clase, la unica manera de hacerlo es instanciando la outer class. Sin embargo, si se puede instanciar de manera normal una inner class desde la clase externa. Ver InstanciandoInner.java
Referenciando la clase Outer o Inner desde la InnerClass Como se referencia a un objeto? Con la palabra This. Lo mismo es con las inner class. Para la outer class se referencia de esta manera ClassName.this Ver: InnerClassReference.java
Modificadores de acceso aplicados a inner class Pueden ser los siguientes: Final Abstract Public Private Protected Strictfp Static (pero static hace que la clase ya no sea inner class)
Inner Class desde metodos locales Tambien se puede definir una inner class desde un metodo. Pero una inner class declarada de esta forma, solo puede ser instanciada dentro del metodo donde se creo la inner class Ver MethodLocalInnerClass.java
Inner Class desde metodos locales De igual manera las inner class creadas en un metodo pueden ver y acceder a los atributos y metodos de la outer; sin embargo no pueden compartir nada con las variables declaradas en el metodo donde estan contenidas. Porque? Ahí los quiero ver…
Inner Class desde metodos locales Los modificadores de acceso de una inner class son los mismos modificadores que tiene una variable de metodo, es decir solo puede ser final o abstract. Exam Watch! Las inner class declaradas dentro de metodos estaticos solo pueden acceder a miembros estaticos de la clase outer, y nada mas..
Inner Class Anonimas Viene en tres tipo diferentes: Plain-Old Anonymous Inner Classes, Flavor One Plain-Old Anonymous Inner Classes, Flavor Two Argument-Defined Anonymous Inner Classes
Inner Class Anonimas(Flavor One) Ver archivo FlavorOne.java
Inner Class Anonimas(Flavor One) Lo que se hace en realidad es definir un subtipo de la clase PopCorn pero que no tiene nombre. Es decir, es casi como crear una clase y hacerla extender de PopCorn. La idea de este tipo de inner class es de redefinir uno o varios metodos de la superclase.
Inner Class Anonimas(Flavor One) Exam Watch ! The closing semicolon is hard to spot. Watch for code like this: Popcorn p = new Popcorn() { public void pop() { } } // aqui falta el ; Foo f = new Foo();
Inner Class Anonimas(Flavor One) Anonymous Inner Classes tiene que todo con polimorfismo ya que lo que se hace es crear un subtipo que no tiene nombre. Ver: FlavorOnePolimorphism.java
Anonymous Inner Classes, Flavor Two La diferencia entre el FlavorOne y el FlavorTwo es que el primero define una subclase anonima para el supertipo mientras que el segundo define un implementador anonimo para la interface dada.
Anonymous Inner Classes, Flavor Two Exam Watch! Lo siguiente es ilegal Runnable r = new Runnable (); // can't instantiate interface Pero lo siguiente no: Pilas con esto Runnable r = new Runnable() { public void run() { } };
Argument-Defined Anonymous Inner Classes Significa crear inner class anónimas como parámetros de una función. Por ejemplo cuando tenemos como argumento de una función a una interface. Ver: ArgumentDefinedInnerClasses.java
Static Nested Classes No son en si inner class en si mismo, lo único que quieren decir es que, como cualquier miembro estático de una clase; este puede ser accesado sin necesidad de tener una instancia de la clase outer. Ver: StaticNestedClasses.java
Static Nested Classes Watch Exam! Así como los métodos estáticos, las static nested classes tampoco tienen acceso a los miembros no estáticos de la outer class, es decir variables de instancia ni métodos.