Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Java SE Orientado a Objetos

Curso de Java SE Orientado a Objetos

Anahí Salgado Díaz de la Vega

Anahí Salgado Díaz de la Vega

Clases Anidadas

16/38
Recursos

Las Clases Anidadas o Clases Helper son clases dentro de otras clases que agrupamos por su lógica y/o características en común.

Podemos encontrar clases estáticas anidadas, clases internas que son locales a un método o clases internas anónimas. Las clases anidadas pueden llamar a cualquier tipo de elemento o método de nuestras clases.

Las Clases Estáticas no necesitan ser instanciadas para poder ser llamadas y ejecutadas, aunque debes recordar que solo permiten llamar a los métodos estáticos de sus clases padre.

Aportes 107

Preguntas 32

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

El problema del vídeo es que uno se pierde cuando Ann empieza con colecciones (ArrayList) y no se entiende porque lo utiliza sin explicación previa.

Una colección es una especie de arrays de tamaño dinámico, lo que almacena realmente es un conjunto de objetos (Clases Wrapper, ver tema anterior) y utiliza el paquete java.util. Hay varios tipos de colecciones, pero aquí en el video se usa únicamente la colección de tipo list, y a su vez, un list tiene 3 tipos de constructores, pero únicamente se utiliza el constructor ArrayList.

EL ArrayList también utiliza índices. Este se instancia así:

Y se le agregan datos de la siguiente manera:

Recuerda que almacenan objetos (Clases Wrapper), es por esto que pueden ser de varios tipos de variables.

En el video Ann utiliza menor que/mayor que “<>” para especificarle al ArrayList que tipo de dato quiere que se agregue en este, Ann agrega la clase static AvaiableAppointment dentro de los símbolos para que el ArrayList solo acepte los tipos de datos que se encuentran dentro de la clase (ósea date, time).

Este tiene un encapsulamiento por default porque se utiliza al nivel de la clase.

Seguido esto, crea el método addAvaiableAddpointment para que este agregue los datos en la colección:

Entonces cada vez que agregue una nueva cita va a estar declarando un nuevo objeto con estos tipos de datos (date y time).
Por ultimo crea otro ArrayList de tipo público para que este devuelva lo que tiene almacenado, un get:

Si alguien más se da de cara con los ArrayList como me paso a mí, aquí les dejo un pequeño resumen.

Básicamente:
La clase ArrayList permite almacenar datos en memoria de forma similar a los Arrays con la ventaja de que el numero de elementos que almacena, es dinámico, es decir, que no es necesario declarar su tamaño.

<code>
// Declaración de un ArrayList de "String". Puede ser de cualquier otro Elemento u Objeto (float, Boolean, Object, ...)

ArrayList<String> nombreArrayList = new ArrayList<String>();

Operaciones disponibles:

<code>
// add
// Añade el elemento al ArrayList
nombreArrayList.add("Elemento");

//size
// Devuelve el numero de elementos del ArrayList
nombreArrayList.size();

//get
// Devuelve el elemento que esta en la posición '2' del ArrayList
nombreArrayList.get(2);

//set
//Permite sustituir un elemento por otro dentro de un ArrayList.
nombre
nombreArrayList.set (index ,  element)

//index, posición que ocupa el elemento a sustituir.
//element, nuevo elemento a insertar en el ArrayList.

//remove
// Borra el elemento de la posición '5' del ArrayList   
nombreArrayList.remove(5); 

Obviamente hay mas comandos pero, estos son los más comunes.
Espero que esto le sirva a alguien.

Para trabajar con fechas es necesario importar una librería

import java.util.Date;

Me parece una clase mala, y es algo con lo que suelo encontrarme en los cursos, contenido del cual no se explica porque, aun tomando los cursos anteriores recomendados, no se si les da pereza hacerlo mejor o tomarse el tiempo de revisar el contenido que publican, la mayoría de vídeos están bien pero no entiendo porque de repente les da por crear este tipo de contenido, pienso que se nota mucho la diferencia de lo bien que estaban las clases anteriores a esta en concreto

Yo en el minuto 8

Hasta acá, el curso iba súper bien. Pero este video deja demasiadas dudas, agregar el tema de los array solo se presta para confusiones. Ademas, el código se volvió un tanto desordenado, Falta el diagrama de clases.

Para poder usar la clase Date, hay que importarla al principio del código.

import java.util.Date;

uy si este video hay que verlo como 3 veces

No entendi muy bien esta clase, vengo siguiendo en orden los cursos previos para llegar hasta aqui, pero cuando empezaste a mencionar los Arrays pero como “colecciones” me perdi.
Puntualmente no entendi como funciona ese arreglo, fue muy sesgado ese punto.

Tener en cuenta algo muy importante que menciona Annahí.

Las razón de las clases anidadas es porque obedecen a una lógica de negocio.

Cuando empieces a detectar que necesita un atributo cuya estructura de datos empieza a tener muchos datos. Entonces se debe pensar si es necesario que sea una clase anidada o pueda ser una clase independiente.

No me ha gustado este vídeo, muy rápido.

He repetido muchas veces este vídeo hasta entenderlo totalmente, considero que es una clase bastante valiosa.

Tuve que ver la clase 2 veces con un lapso de tiempo de 24 horas para poder entender el concepto y buscar que son colecciones. Después miro y resulta que es un tema que dan mas adelante.

Que Clase tan buena.
“Cuando identifiquemos que en nuestra lógica de negocio es necesario agregar un atributo o un método que necesite mas atributos, debemos revisar si es pertinente usar una clase anidada o una clase aparte”

Se pierde un poco cuando argega el ArrayList encima lo hace demasiado rapido usando todos los atajos del ide que ni siquiera vemos

En este caso podria utilizar herencia en vez de clase anidada?

Estuvo bien densa la clase, toca repetirla 😃

Versión alternativa usando for i

 for (int i = 0; i < myDoctor.getAvailableAppointments().size(); i++) {
 Doctor.AvailableAppointment aA = myDoctor.getAvailableAppointments().get(i);

 System.out.println(aA.getDate() + " " + aA.getTime());
        }




¿Y se podría utilizar herencia y no una clase anidada?

import java.util.ArrayList;
import java.util.Date;```

Para los que quedaron perdidos como yo en el tema de ArrayList, les recomiendo ver este video

📑 Un clase anidada es básicamente una clase que vive dentro de otra clase.

Veanlo bien lentamente, detengansen y reveean cada vez que algo se les escapa. Es una clase complicada, pero explica todo excelente. No se desesperen con el aprendizaje, si van todo a las corridas hay muchos conceptos que se les va a perder.
De hecho, se van a dar cuenta que mucho de los principios de los cuales parece que asustan, ya los vimos en clases anteriores.

otra vez clases saltandose detalles, así se pierden muchos, incluyendome. De verdad que le falta ser mas prevenida con los detalles para que los estudiantes puedan entender todo

Hola, veo q en tu pantalla en el minuto 06:56 muestras una clase exterior Enclosing y su interior StaticNested, luego veo q invocas su metodo run (de la clase anidad interior ) q NO ES estaico apartir de una instancia, segun mencionas esto NO ESTA BIEN, ya q run deberia ser tbm estatico para ser usado.

Cuando tengan cualquier duda con respecto a una sintaxis o quieran entender con mas detalle pueden visitar la documentación de Java, esto es algo casi obligado en el futuro de un programador

https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/ArrayList.html

Esta clase puede que deje algunas dudas, el problema es que intenta explicar algo nuevo (clases anidadas) con algo que no se ha visto en el curso (array list). Les comparto dos recursos para entender ambos conceptos por separado.

https://www.programiz.com/java-programming/static-class

https://www.programiz.com/java-programming/arraylist

Porque no usar herencia para simplificar y sea mas legible

creo que esto es mejor hacerlo con una clase y usar la herencia o importar la otra clase

Tambien podemos acceder a las citas del doctor de la siguiente forma:

        for (int i = 0; i < myDoctor.availableAppointments.size(); i++) {
            System.out.println(myDoctor.availableAppointments.get(i).getDate()
                    + " " + myDoctor.availableAppointments.get(i).getTime());
        }```

Se esta usando el objeto myDoctor y se accede al atributo a availableAppointments... como este es un array podemos acceder a sus elementos. En este caso se esta accediendo a un objeto de la coleccion en la posicion [i] ... cuando obtenemos el objeto podemos acceder a sus metodos ("getTime() y getDate()") 







Muy interesante las clases anidadas.

Excelente

esta es de las mejores clases que he visto en platzi, se explica muy a detalle la helper class y junto con aclare dudas que tenia con otros lenguajes 😄

Súper clase.

Vaya aburrimiento de clase esta, ha dado por explicadas cosas que no debería haber hecho. Habla español, pero escribe la mitad de cosas en inglés y la mitad en español, eso hace que te pierdas aún más. Menos mal que yo ya esto ya lo di en otro curso mas o menos.

dejo este video donde se explica muy bien este tema

https://www.youtube.com/watch?v=zCygavxhnZE

Alguien que me corrija si estoy mal. Pero creo que hay un error en la explicación en el minuto 6:41. Ella dice que se tiene que instanciar la clase exterior ¨Pero no la interior¨. Pero yo como lo interpreto que es AL REVÉS. Porque está creando un objeto del tipo ¨Enclosing.StaticNested¨ Es decir un objeto del tipo “StaticNested” que está dentro de la clase “Enclosing”.
Dicho de otra forma. Si solo se necesitara “instanciar la clase exterior” como ella dice, el código sería: Enclosig nested = new Enclosing(); < (Esto es lo que yo entiendo por instanciar una clase exterior, estoy en lo correcto o no?).

Como dato adicional si “run();” fuera “public static void run(){ }” Se podría acceder a el sin instanciar nada, tan solo con Enclosing.StaticNested.run(); podríamos ejecutar ese método en la clase Main. Al ser “private” es cuando necesitaríamos que crear una instancia de la clase que la contiene (es decir la clase interior StaticNested) para poder llamarla.

buenas tardes, las clases anidadas no me parecen, hacen que tu código sea mas desordenado no hay como crear una clase Pojo y listo.

Todo iba bien, hasta que vi los ArrayList.
Pero después de repetirlo como 3 veces, logre entender.

El curso es antiguo pero muy bueno

¿Si se hace esto con sus citas disponibles se podría hacer lo mismo con sus cirugías no?

Excelente explicacion!!

Yo no conocía el concepto de clases anidadas, esto es muy útil a mi parecer.

Un ArrayList es una clase en la librería Java y a diferencia de los arrays, contiene sus propios métodos que listo a continuación:

  1. add(Object) añade un objeto a la lista.

  2. remove(index) elimina del heap al objeto que se encuentre en el índice especificado.

  3. remove(object) elimina del heap al objeto especificado.

  4. contains(Object) devuelve un valor true si el objeto especificado se encuentra en la lista.

  5. isEmpty() devuelve un valor true si la lista está vacía.

  6. indexOf(Object) devuelve el índice del objeto.

  7. size() devuelve el tamaño de la lista.

  8. get(index) devuelve el objeto en el índice deseado de la lista.

Es importante saber que para añadir variables primitivas a un ArrayList, estas deben estar envueltas por una clase de tipo envoltorio.

cuando pone en el tipo dato de la clase arrylist :
ArrayList <Nombre_claseAnidada> objeto = new ArrayList <>();
quiere decir que el tipo de elementos que se almacenarán en el array dinámico serán los tipos de datos de los atributos que se asignaron a la clase anidada

Fue una clase algo compleja, por esa razon tome notas de todo, aqui en mis apuntes explico todo con comentarios paso a paso, espero les sea de ayuda.

Lo más importante de esta clase es entender las clases anidadas, en este caso la clase estática anidada. El funcionamiento de los ArrayList es un concepto más elevado y recientemente lo vemos, por eso pueden investigar más sobre eso en la internet como muchos lo han hecho. No lo vean como un obstáculo para seguir aprendiendo.

Mis clases favoritas son las de Platzi. jeje 🐱‍👓✌💚

Les dejo una pagina que profundiza de a poco en los arrays, me fue muy útil. Jarroba

Estoy trabajando con Vs Code, me esta yendo de maravilla pero como Ann al escribir “ArrayLi…” y presionar Enter, lo que hace es que se importa una libreria que se llama:

import java.util.ArrayList; 

Lo mismo paso cuando puso “Date…” y presiono Enter, se creo la libreria:

import java.util.Date;

A tener en cuenta porque a veces copiamos el código y nos sale error 😃

Creo que esta parte para seguir con la modularidad se tendría que realizar en una clase abstracta.

Buena clase aunque me costó al inicio entenderla

¿Es recomendable siempre encapsular de manera private todas las variables de las clases?

El resultado de la ejecución de la clase anidada:
💚💻

.
Impresión en Consola:

Qué brutalidad de clase por parte de Anahí, qué excelente explicación y pedagogía.

Clases internas locales o Inner class: Clases dentro de un método. Son útiles cuando se va a utilizar (instanciar) la clase interna una vez. El objetivo es simplificar más el código.
Su ámbito queda restringido al método donde son declaradas.
VENTAJAS

  • Están muy encapsuladas. Ni siquiera la clase a la que pertenecen pueden acceder a ellas.

  • Tan sólo pueden acceder el método donde están declaradas.

  • El código resulta más simple.

Ejemplo de sintaxis:

Class Clase_externa{
	public void metodos () {
		Class Clase_internaLocal {
			código clase interna
		}
	  código método 
	}
 código clase externa
} 

Una explicación un poco más profunda y con ejemplos, sobre los tres tipos de clases anidadas que maneja Java (estáticas, internas, internas anónimas).

https://javadesdecero.es/poo/clases-anidadas/

Yo cuando no entiendo la clase estatica anidada despues de ver el video 3 veces.

Sintaxis foreach en java:

for (type var : array)
{
statements using var;
}

Es equivalente a:

for (int i=0; i<arr.length; i++)
{
type var = arr[i];
statements using var;
}

En el for each

Doctor.AvailableAppointment aA

¿Esto significa que aA es una “variable” de tipo objeto, ya que lo que se va a recorrer es un ArrayList (colección) de objetos ?

Un ArrayList permite almacenar datos de forma dinámica. Esto es, no limitandose a una cantidad de datos preestablecida (como pasaría con un array normalito).
En este video lo explican muy bien 😃

De todas formas, si yo quiero que la clase anidada sea unicamente vista por el doctor, seria:

private class ClaseAnidada{}
Donde esta podria ser vista desde los metodos del objeto Doctor no?

Tengo una duda, se puede en vez de una clase anidada crear una “interface” para lo de "available appointment? ya que es una acción que el objeto doctor suele hacer y según recuerdo las interfaces sirven para eso, para hacer las acciones (métodos) y solo implementarlas en la clase que se necesiten
Saludos! 😃

Esta parte del curso es un poco densa, siento que a diferencia de los capitulos anteriores es un poco compleja de entender.

Super! habrá que practicarlo

Me confundi como a la mitad del video, desde que empezamos a hacer nosotros nuestro ejemplo.No le entendi mucho.

interesante!

Excelente explicación de las clases Anidadas

Según entedí sobre la clase, las clases anidadas se usan para declararla dentro de la única clase que la va usar? pero si esta clase anidada es usada en otro lugar (Como clase: Recepcionista) entonces esta se declara como una clase independiente?

Excelente clase instructora Anahí, me agrado la parte del uso de colecciones o ArrayList para poder almacenar las citas disponibles del Doctor, ahora tendré en cuenta el uso de clases anidadas cuando pueda simplificar otras clases.

¿Alguno tuvo algún problema a

public class Doctor {
    //atributos
    static int id = 0; //Autoincrement; //Sino es statica se vuelve a cero cada vez que genero un nuevo constructor
    private String name;
    private String email;
    private String speciality;
 
    private Date date; //que es Date? 
    private String time;
    private int id_AvaibleAppointment;

qui

import static Ui.UiMenu.*;
import java.util.Date;

public class Main {

    public static void main(String[] args) {
        Doctor myDoctor = new Doctor("Tony S", "Cardiologia");
        for (int i = 0; i < 7; i++) {
            myDoctor.addAvailableAppointmet(new Date(), "0" + i + "pm");
        }
        //myDoctor.addAvailableAppointmet(new Date(), "05 pm");
        //myDoctor.addAvailableAppointmet(new Date(), "06 pm");
        //myDoctor.addAvailableAppointmet(new Date(), "07 pm");
        //System.out.println(myDoctor.getAvailableAppointments().get(0).toString());
        for (Doctor.AvailableAppointment availableAppointment : myDoctor.getAvailableAppointments()) {
            System.out.println(availableAppointment.toString());
        }
}
}

Que ciclo for mas raro 🤔😂❤

Todo se entiende muy bien, pero creo que muchos como yo se enredaron con el ArrayList, del resto se entiendo claramente. Lo que hice fue ver bien el codigo y asi solucione dudas, por lo que lei en comentarios el ArrayList lo explican mas adelante. Muy buena clase.

importante tenerlo claro el trabajo con este tipo de clases 😃

Esta clase lo tuve que ver 2 veces y ver cada detalle pero después de eso ,me quedó muy claro sobre las clases anidadas y el uso de ArrayList. Y la gran ventaja de este uso. 😎

Con el uso de bases de datos donde almacenaria cada cita que se vaya agendando en una tabla es recomendable el uso de colecciones para manejar los datos en el programa y luego cuando el usuario decida procesarlos mandarlos a la base de datos y limpiar la coleccion? Y en este caso tambien seria recomendable que tenga la clase anidada con todos los posibles metodos del objeto doctor o se puede tener una clase aparte donde defina todos los posibles metodos que pueda hacer el doctor? Que ventaja daria cada caso de uso? Gracias.

😃

Hubiera sido bonito una explicación un poquito más detallada de las colecciones de objetos y como utilizarlas 😦

Acabamos de hacer un arreglo de objetos, es por eso que para el ciclo for fue necesario declarar el objeto aA, así cada elemento se imprime en cada iteración del ciclo. Es un ejemplo muy particular y apropiado para ilustrar el concepto de una clase anidada. Es inevitable que para poder hacerlo tenga que saltarse algunos temas que no hemos visto. Pero es la complejidad de este mundo, donde hay que vivir lleno de spoilers.

A medida que se va avanzando, se ven temas un poco más “complejos” por así decirlo, y puede ser que sientas esta clase un poco pesada o que va muy rápido. Veo mucha gente que se queja porque no saben lo que es un ArrayList o porque no fue explicado, yo no vi lista de arreglos pero si sé lo que es un array, no me preocupé mucho la verdad en eso. La idea es entender el concepto de una clase anidada estática y para que caso se puede utilizar. En todo momento se aclaro que no siempre se van a trabajar con este tipo de clases. Así que si sentís que tenés que ver el vídeo de nuevo, no te preocupes, a mi me pasó lo mismo. Voy a hacer mis apuntes, tomar unos matecitos mientras dejo que mi cerebro se relaje y después vuelvo de nuevo para seguir avanzando en el curso. No se pongan mal y sigan aprendiendo 😃

Estuve investigando un poquito lo de generar fechas con Java y ¡Que lío! Así que hice una clase con un método estático que al pasarle una fecha en String, te crea la fecha en Date😃 (en sólo tres formatos: dd-MM-yyyy hh:mm, dd/MM/yyyy hh:mm, dd MM yyyy hh mm)

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class DateGenerator {
static public Date stringToDate(String dateString) throws ParseException {
		
		try {
		SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy hh:mm");
		Date date;
			date = sdf.parse(dateString);
			long dateInMili = date.getTime();
			Date d = new Date(dateInMili);
			return d;
		}catch(ParseException e1) {
				try {
					SimpleDateFormat sdf1 = new SimpleDateFormat("dd MM yyyy hh mm");
					Date date;
						date= sdf1.parse(dateString);
						long dateInMili1 = date.getTime();
						Date d = new Date(dateInMili1);
						return d;
			}catch(ParseException e2) {
				try {
					SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy hh:mm");
					Date date;
						date= sdf1.parse(dateString);
						long dateInMili1 = date.getTime();
						Date d = new Date(dateInMili1);
						return d;
			}catch(ParseException e3) {
				e3.printStackTrace();
			}
			}
		}
		return null;
	}	
}

Nota: No estoy seguro si hacer try catchs anidados sea una buena práctica.

¿hay algún curso donde se expliquen lo que son colecciones etc. ?
la verdad no entendí muy bien esta clase 😦

Desde que empezo con los ArrayList me perdi y no llegaba a entender lo que estaba haciendo la profesora :c

Si se perdieron un poco con la clase, así como yo… les recomiendo ver este video donde explican muy bien como funcionan las ArrayList 😃 con eso es mas que suficiente para poder entender mejor esta clase!!

Una clase bastante densa, pero la entendí, se debe realizar el análisis lógico de lo que ella quiere demostrar, el arrayList ayuda a ingresar la citas y en otro array las muestra llamándolo a través de un método, la parte del for each es la mas complicada pero su finalidad es recorrer el objeto array y mostrar su contenido.

hasta ahorita esta clase ha sido la mas compleja de entender de todas las que llevo, tendre que indagar por fuera para entender las clases anidadas,

Clase 16: Clases Anidadas

Para los que les apetezca tomar la clase en Eclipse iré subiendo mi código; hay pequeñas diferencias con Intellij, por no decir ninguna, pero con Eclipse se puede trabajar igual de bien. NOTA: Solo subiré la jerarquía y lo que haya sido modificado, tendrán los archivos no modificados en las clases anteriores.

Jerarquía del proyecto


Archivo: Doctor.java

package mymedicalappointment;

import java.util.ArrayList;
import java.util.Date;

public class Doctor {
//	State/Attributes
	public static int id = 0;
	public String name;
	public String specialty;
	
//	Constructors
	public Doctor() {
		System.out.println("Construyendo el Objeto Doctor");
		id++;
	}
	
	public Doctor(String name, String specialty) {
		System.out.println("El nombre del Doctor asignado es: " + name);
		id++;
		this.name = name;
		this.specialty = specialty;
	}
	
//	Behavior
	public void showName() {
		System.out.println(name);
	}
	
	public void showId() {
		System.out.println("Id Doctor: " + id);
	}
	
	ArrayList<AvailableAppointment> availableAppointment = new ArrayList<>();
	public void addAvailableAppointment(Date date, String time) {
		availableAppointment.add(new AvailableAppointment(date, time));
	}
	
	public ArrayList<AvailableAppointment> getAllAvailableAppointment(){
		return availableAppointment;
	}
	
	public static class AvailableAppointment{

		private int id;
		private Date date;
		private String time;
		
		public AvailableAppointment(Date date, String time) {
			this.date = date;
			this.time = time;
		}
		
		public Date getDate() {
			return date;
		}
		public void setDate(Date date) {
			this.date = date;
		}
		public String getTime() {
			return time;
		}
		public void setTime(String time) {
			this.time = time;
		}
		
	}
}


Archivo: Main.java

package mymedicalappointment;

import static ui.UIMenu.*;

import java.util.ArrayList;
import java.util.Date;

public class Main {

	public static void main(String[] args) {
		
		Doctor myDoctor = new Doctor("Anahí Salgado", "Pediatría");
		myDoctor.addAvailableAppointment(new Date(), "4pm");
		myDoctor.addAvailableAppointment(new Date(), "6pm");
		myDoctor.addAvailableAppointment(new Date(), "8pm");
		
		for (Doctor.AvailableAppointment aa : myDoctor.getAllAvailableAppointment()) 
{
			System.out.println(aa.getDate() + " " + aa.getTime());
		}
	}
}

Una clase anidada es una clase contenida en otra clase, pueden ser clases anidades estáticas, clases internas que son locales a un método o clases internas anónimas.

Min 6:44 es al revés, se esta instanciando la clase interior, y se accede a las clases anidadas estáticas utilizando el nombre de clase adjunto tal cual lo muestra, a diferencia como se menciona para clases inner, una instancia de InnerClass solo puede existir dentro de una instancia de OuterClass y tiene acceso directo a los métodos y campos de su instancia adjunta. Para crear una instancia de una clase interna, primero debe crear una instancia de la clase externa.
Static inner class:

OuterClass.StaticNestedClass nestedObject =
     new OuterClass.StaticNestedClass();

Inner class:

OuterClass.InnerClass innerObject = outerObject.new InnerClass();

outerObject tiene que ser creado previamente
saludos 😃

excelente clase

Clases anidadas

Un clase anidada es básicamente una clase dentro de otra clase, la clase “padre” se denomina clase exterior y a la clase “hija” interior.

Estas clases no están viviendo a la par, está una dentro de otra.

class ClaseExterior{
	...
	class ClaseAnidada{
	}
}

Existen dos tipos de clases anidadas:

  • Clases internas: De estas existen dos tipos:
    • Clases locales a un método: Son clases declaradas dentro de una función, no es común ver este tipo de clases pero existen.
    • Clases internas anónimas.
  • Clases estáticas anidadas.
class ClaseExterior{
	static class ClaseEstaticaAnidad{
	}
	class ClaseInterna{
	}
}
<h4>Clases estáticas</h4>
  • No se necesitan crear instancias para llamarlas, al igual que los métodos estáticos.
  • Solo se pueden llamar a los métodos estáticas.
<h4>Clases anidadas</h4>
  • Anidadas pueden llamar a cualquier tipo de elemento o método.
  • Clases Helper
  • Agrupadas por lógica
  • Encapsulación: También se pueden añadir modificadores de acceso a las clases anidadas.

si les da error al declarar el tipo de variable Date es por q falta importar:

import java.util.Date;```

Excelente clase