Se utilizan las clases inner cuando quieres tener acceso a algun medodo de la clas exterior
Se utilizan las clases abstractas cuando no necesariamente quieres tener acceso a los metodos de la clase exterior
Introducción al Curso
Bienvenidos al Curso Avanzado de Java SE
Clases avanzadas
Clases Abstractas
Implementando clases abstractas al proyecto
Ejercicio. Clases Abstractas
Implementando métodos abstractos en Java
JavaDocs
Qué es JavaDocs
Implementando JavaDocs al proyecto
Reto
JavaDocs tags para herencia e interfaces
Generado Java Docs
Clases Anidadas
Clases anidadas y tipos
Ejercicio. Clases Anidadas
Implementando una clase anidada al proyecto
Instanciando clases estáticas anidadas
Enumerations
Interfaces Avanzadas
Métodos con implementación métodos default y private
Creando Interfaz DAO con métodos default y private
Ejercicio. Interfaz DAO
Diferencia Interfaces y Clases Abstractas
Herencia en Interfaces
Colecciones Avanzadas
Map, HashMap, TreeMap y LinkedHashMap
Excepciones
Manejo de errores
Try-catch-finally / Try-with-resources
JDBC
Definición y composición del API
Ejercicio. JDBC API
Creando la base de datos y conectando el proyecto con MySQL
Generando conexión a la base de datos y creando clase de constantes
Sentencia SELECT en Java
Sentencia SELECT con Parámetros
Sentencia INSERT en Java
Reto: Reporte por fecha
Lambdas
¿Cómo resolver el reto: reporte por fecha?
Interfaces funcionales
Programación Funcional
Lambdas
Ejercicio. Lambdas
Lambdas como variables y Recursividad
Stream y Filter
Predicate y Consumer
Fin del Curso
Conclusión del curso
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Parece que estás interesado en aprender a programar una simulación de libro en Java que refleja cómo se leen los libros reales, página por página. En este contenido, te guiaremos a través de la creación de una clase anidada denominada 'Page' dentro de una clase exterior llamada 'Book'. Este enfoque no solo proporciona una representación más precisa de la lectura de libros, sino que también añade valor a tu proyecto de simulación.
Las clases anidadas son clases definidas dentro de otras clases. Son útiles cuando se desea crear una relación lógica que refuerce el encapsulamiento y la organización del código. Las clases estáticas son ideales cuando no es necesario acceder a los métodos o elementos de la clase exterior.
Para simular una página de libro, empezamos creando una clase estática anidada dentro de la clase 'Book'. Esto es porque no necesitamos acceder a métodos específicos de 'Book'. A continuación, presentamos un ejemplo de cómo configurar esta clase:
public class Book {
// Otros métodos y atributos de Book aquí
public static class Page {
// Atributos de la clase Page
private int number; // número de página
private String content; // contenido de la página
// Constructor para inicializar una página
public Page(int number, String content) {
this.number = number;
this.content = content;
}
// Getters y setters para modificar y acceder a las propiedades
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
}
Para enriquecer la clase 'Page', hemos incorporado atributos básicos como el número de página y el contenido de texto. Además, implementamos getters y setters para estos atributos, y un constructor para poder inicializar cada página con sus propiedades:
number
: Almacena el número de la página.content
: Almacena el texto, o potencialmente otros tipos de contenido como imágenes.Estos componentes básicos mejoran la capacidad de simular el cambio de página, elemento a elemento, como en un libro físico.
Ahora que hemos definido la estructura básica de la clase 'Page', el siguiente paso en tu desarrollo es codificar la experiencia interactiva del lector. Aquí hay algunas características potenciales a considerar:
¡Continúa tu viaje de aprendizaje en Java! Cada pequeño paso te acerca a la maestría en programación.
Aportes 19
Preguntas 2
Se utilizan las clases inner cuando quieres tener acceso a algun medodo de la clas exterior
Se utilizan las clases abstractas cuando no necesariamente quieres tener acceso a los metodos de la clase exterior
Pregunta como se haría una clase anidada en un diagrama de UML de clases.
muy buena clase y excelente explicación!!!
Vamos a trabajar.!!
Esta es mi versión de la definición de la clase anidada Page.
Page
import com.erosennin.amazonviewer.utils.Utils;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class Book extends Publication implements Visualizable {
private int id;
private String isbn;
private int pages;
private Date startDate;
public Book(String title, String editorial, String[] authors, Date publicationDate, String isbn, boolean readed, int pages) {
super(title, editorial, authors, publicationDate);
super.setReaded(readed);
this.isbn = isbn;
this.pages = pages;
}
public int getId() {
return id;
}
public String getIsbn() {
return isbn;
}
public int getPages() {
return pages;
}
public static List<Book> makeBooksList() {
List<Book> books = new ArrayList<>();
for (int i = 1; i < 6; i++) {
books.add(new Book("Book " + i, "Editorial " + i, new String[]{"Author " + i}, new Date(),
"ISBN " + i, false, 200 + i));
}
return books;
}
public void view() {
setReaded(true);
startToSee(new Date());
for (int i = 0; i < 100; i++) {
System.out.println("...You are reading the " + getTitle() + "...");
}
Utils.timeDelay(2);
stopToSee(new Date());
System.out.println("\n::YOU JUST SAW::" + toString());
}
@Override
public String toString() {
StringBuilder printerAuthors = new StringBuilder();
String[] authors = getAuthors();
for (String author : authors) {
printerAuthors.append(author).append(", ");
}
printerAuthors.delete(printerAuthors.length() - 2, printerAuthors.length() - 1);
return "\n::BOOK::" +
"\nTitle: " + getTitle() +
"\nPublisher: " + getEditorial() +
"\nAuthors: " + printerAuthors +
"\nPublication Date: " + new SimpleDateFormat("dd/MM/yyyy").format(getPublicationDate()) +
"\nISBN: " + getIsbn() +
"\nReaded: " + isReaded() +
"\nPages: " + getPages();
}
@Override
public void startToSee(Date startDate) {
this.startDate = startDate;
}
@Override
public void stopToSee(Date endDate) {
if (startDate.getTime() < endDate.getTime()) {
setTimeReaded((int) (endDate.getTime() - startDate.getTime()));
} else {
setTimeReaded(0);
}
}
public static class Page {
private int id;
private int number;
private String content;
public Page(int number, String content) {
this.number = number;
this.content = content;
}
public int getNumber() {
return number;
}
public String getContent() {
return content;
}
}
}
si en buen punto las clases anidadas como se representan en UML
muy buena claseee!!!
Que buena clase, un ejemplo muy bueno
Me parece que ya viene lo más emocionante 😄
un ejemplo muy bueno de aplicacion, quedo claro el tema.
Muy buen ejemplo, algo que me pareció importante fue lo de Inner y Static:
Utilizamos Inner Class cuando queremos tener acceso a algún método en donde estamos y Static Class no necesariamente queremos tener acceso a los métodos en este caso de Book.
Excelente clase buena practica
Muy buena implementación, muy interesante esta nueva herramienta
Las clases anidadas son una representación de la relación Composición?
Super 😃
/**
* Clase Interior Page
* */
public static class Page { }
Genial.
Excelente clase, ahora me quedo más clara la diferencia entre las clases static y las clases inner respecto al uso de métodos de la clase externa.
Entonces existen clases que hacen parte de otras, que su definición esta en la definición de otra clase (por eso el aninadadas)
¿En qué se diferenciaría con qué una clase tenga como atributo a otra clase? ¿En qué casos es mejor una u otra?
Tengo entendido que es cuándo nadie más hará uso de ella, pero ¿Trae más ventajas?
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?