No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

11 Días
21 Hrs
9 Min
45 Seg
Curso Avanzado de Java SE

Curso Avanzado de Java SE

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Clases anidadas y tipos

11/40
Recursos

Aportes 37

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Clase estatica: son básicamente lo mismo que una clase no estática, pero hay una diferencia: una clase estática no puede ser instanciada.

Clase anidada: Las clases anidadas te permiten agrupar lógicamente clases que solo se utilizan en un lugar, por lo tanto, esto aumenta el uso de la encapsulación y crea un código más fácil de leer y de mantener.

Se vuelve muy engorroso aplicar TODOS los estándares y TODOS los conceptos de clases de java, creo que lo mejor es utilizar las clases sin anidar o a lo mucho anidar 1 sola clase; se vuelve como la canción: “Hay un hoyo… hay un hoyo en la orilla del mar… Una chicha, en bikini, una chica en bikini sentada en el hoyo en la orilla del mar…”

Pero la utilidad de las clases anidadas cual es? no comprendo la lógica quien me explica? Que refleja una clase anidada una relación de composición ejemplo class carro { class motor{} }?

Pregunta, ¿La clases anidadas no terminan siendo una mala práctica? ¿esto va en contra del principio de alta cohesión y bajo acoplamiento ?

La verdad no he usado las clases estáticas y muy poco las clases anidadas.

  • En mi percepcion la utilidad de las clases anidadas es tener un codigo legible, y controlado no siempre modularizar el codigo lo hace mas legible, y cuando me refiero a controlado ,es que al anidar le estoy dando una limitacion al scope de mi clase interna y sus metodos , obviamente mencionando los los modificadores de acceso

  • En cuanto a los distintos tipo de clases anidadas dejo mis ejemplos con sus apuntes de su funcionalidad

Inner Class

Al instanciar un objeto de mi clase interna tengo que llamar previamente mi clase externa
ClaseExterna.ClaseInterna Objeto

Clase Static Anidada

Utilizamos el objeto creado de la clase interior y con el punto llamamos especificamente el metodo de la clase interior
ObjetoClaseInterior.metodoClaseInterior

Varios tipos de clases andiadas

Pueden convivir varias clases anidadas y de diferente tipo

Clase dentro del metodo

En este caso el metodo que esta dentro de la clase interna, es el que mencionamos en el test ya que previamente se instancio un objeto de la clase local

Tengo una inquietud, ¿las clases anidadas no van en contra vía del principio de alta cohesión y bajo acoplamiento?

Es un poco raro las clases anónimas porque una clase abstracta no podías declarar un objeto, pero aquí justamente dice “declarar un objeto de la clase abstracta” jajaja

Me van a perdonar por mi opinión pero para mi todo eso es complicarse la vida.

Honestamente no encuentro un caso de uso para implementar clases anidadas. Esto rompe completamente el paradigma orientado a objetos y sus fundamentos/principios.

Las clases anidadas te permiten agrupar lógicamente clases que solo se utilizan en un lugar, por lo tanto, esto aumenta el uso de la encapsulación y crea un código más fácil de leer y de mantener.

  • Una clase anidada no existe independientemente de su clase adjunta. Por lo tanto, el alcance de una clase anidada está limitado por su clase externa.

  • Una clase anidada también es miembro de su clase adjunta. También es posible declarar una clase anidada que es local a un bloque.

  • Como miembro de su clase adjunta, una clase anidada se puede declarar private, public, protected, o default (Leer sobre Modificadores de acceso).

  • Una clase anidada tiene acceso a los miembros, incluidos los miembros privados, de la clase en la que está anidado. Sin embargo, lo inverso no es verdadero, es decir, la clase adjunta no tiene acceso a los miembros de la clase anidada.

  • Hay dos tipos generales de clases anidadas: las que están precedidas por el modificador static (static nested class) y las que no lo están (inner class).

9:25 - “los modificares de acceso para la clase estática debe ser público a menos que solo quieras que la clase exterior los use”

entiendo entonces que a pesar de que la clase interior declare métodos y atributos privados, solo ella y la clase exterior podrán acceder a ellos?

La explicación de los tipos de clases para las anidaciones es posible expresarlas en sentido de patrones? Como por ejemplo un singleton para una clase con un constructor privado y un unico metodo de acceso static getInstance()?

class OuterClass {
  int x = 10;

  class InnerClass {
    int y = 5;
  }
}

public class MyMainClass {
  public static void main(String[] args) {
    OuterClass myOuter = new OuterClass();
    OuterClass.InnerClass myInner = myOuter.new InnerClass();
    System.out.println(myInner.y + myOuter.x);
  }
}```

Si una clase estática está anidada dentro de otra clase, sigue siendo una clase estática y no se puede instanciar directamente. Sin embargo, la clase externa puede crear instancias de la clase interna estática.

Cuando se declara una clase estática dentro de otra clase, se establece una relación de pertenencia, pero la clase interna estática no depende de una instancia de la clase externa. Esto significa que la clase interna estática se puede utilizar sin necesidad de crear una instancia de la clase externa.

Para acceder a la clase estática anidada, se utiliza la sintaxis ClaseExterna.ClaseInterna. Por ejemplo, si tienes una clase llamada ClaseExterna que contiene una clase estática anidada llamada ClaseInterna, puedes acceder a la clase interna de la siguiente manera:

java
Copy code
ClaseExterna.ClaseInterna instancia = new ClaseExterna.ClaseInterna();
Es importante destacar que la clase interna estática no puede acceder a los miembros no estáticos de la clase externa, ya que no tiene una referencia a una instancia específica de la clase externa. Solo puede acceder a los miembros estáticos de la clase externa.

En resumen, una clase estática anidada sigue siendo una clase estática y no se puede instanciar directamente. Se accede a ella utilizando la sintaxis ClaseExterna.ClaseInterna, y la clase externa puede crear instancias de la clase interna estática.

Gracias!

Can an inner class access the outter class attributes?

Ejemplo de clase estática:

excelente explicación!!!

package ar.com.martinjm.practice;

import ar.com.martinjm.practice.nestedclasses.OuterClass;

public class Application {
    public staticvoid main(String args[]){
        System.out.println("nested classes");
        System.out.println("");

        //TestStaticNestedClasswithstaticmethodand non static methods
        OuterClass.StaticNestedClass.hereIAm();
        OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass();
        staticNestedClass.hereIam();

        //TestInner class
        OuterClass outerClass = new OuterClass();
        OuterClass.InnerClass innerClass = outerClass.new InnerClass();
        innerClass.hereIam();

        //Test class in a method
        OuterClass.hereIAm();

    }
}

La clase anidadas las podemos utilizar según la necesidad con un máximo de 2 , para acceder a ella desde otra clase, estas tienen que contener la palabra static en la subclase ya con ello solo referenciamos mapeando la clase hasta llegar a la clase estática y luego a sus métodos.😃

Por ejemplo: para crear un objeto para la clase estática se usa esta sintaxis:
OuterClass.StaticNestedClass nestedObject =
new OuterClass.StaticNestedClass();

Source

Que bien

Muy útil

Está bien disponer de las herramientas que nos da java, buena clase.

Nunca lo habia visto en el lenguaje que conozco, Buena!

tambien se puede definir una clase anonima a partir de una clase no abstracta. Solamente tienes que sobrescribir los metodos

en la linea 12 dice @Test que significa???

Estupenda explicación sobre las clases anidadas y sus tipos instructora Anahí, básicamente dependerá de la lógica que use nuestro proyecto para saber si seria eficiente implementarlas.

Excelente explicación teórica, muy buena definición de las clases anónimas que son abstractas, ya que nos proveen de una instancia con un comportamiento implementado por nosotros sin necesidad de crear otra clase que herede de la clase abstracta

Explicacion breve de Clases Anidadas

Genial.

cuando Java compila, como queda la creacion de los .class?

Excelente 😃 super útil para cuando no queremos tener más clases que solo será utilizada por una clase. 😃

Entonces pensando en System.out.println
Podemos decir que println es un método de la clase out
Y que out es una clase anidada a System?

Respecto a las clases estáticas anidadas, la tutora expresa lo siguiente: “S quiero utilizar un método de la clase Enclosing, ese método tiene que ser forzosamente estático, sino no voy a poder llamarlo o tener acceso a el”. Difiero respecto a esto, ya que si creo un método no estatico dentro de la clase “ENCLOSING” y declaro una instancia de la misma clase, puedo acceder a dicho método sin ningún problema. Opiniones respecto a esto?

excelente explicacion