No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

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: 鈥淗ay 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 鈥渄eclarar 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 - 鈥渓os 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: 鈥淪 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 鈥淓NCLOSING鈥 y declaro una instancia de la misma clase, puedo acceder a dicho m茅todo sin ning煤n problema. Opiniones respecto a esto?

excelente explicacion