// Definimos una interfaz con dos métodos
interface DatosPersonales {
String obtenerDescripcion();
void mostrarDatos();
}
// Clase Persona con atributos privados
public class Persona {
private String nombre;
private int edad;
private String tipocabello;
// Constructor por defecto
public Persona() {
this.nombre = "desconocido";
this.edad = 0;
this.tipocabello = "desconocido";
}
// Constructor con parámetros
public Persona(String nombre, int edad, String tipocabello) {
this.nombre = nombre;
this.edad = edad;
this.tipocabello = tipocabello;
}
// Métodos Getters y Setters
public String getNombre() { return nombre; }
public void setNombre(String nombre) { this.nombre = nombre; }
public int getEdad() { return edad; }
public void setEdad(int edad) { this.edad = edad; }
public String getTipocabello() { return tipocabello; }
public void setTipocabello(String tipocabello) { this.tipocabello = tipocabello; }
// Clase interna Estudiante implementando la interfaz
static class Estudiante extends Persona implements DatosPersonales {
private String grado;
public Estudiante(String nombre, int edad, String tipocabello, String grado) {
super(nombre, edad, tipocabello);
this.grado = grado;
}
@Override
public String obtenerDescripcion() {
return "Nombre: " + getNombre() + ", Edad: " + getEdad() +
", Tipo de cabello: " + getTipocabello() + ", Grado: " + grado;
}
@Override
public void mostrarDatos() {
System.out.println(obtenerDescripcion());
}
public String getGrado() { return grado; }
public void setGrado(String grado) { this.grado = grado; }
}
// Método main dentro de Persona para evitar conflictos
public static void main(String[] args) {
Persona juan = new Persona();
System.out.println("Nombre por defecto: " + juan.getNombre());
juan.setNombre("Juan Morales");
System.out.println("Nombre cambiado: " + juan.getNombre());
// Crear instancia de Estudiante
Estudiante estudiante = new Estudiante("Perrita", 20, "Lacio", "Universidad");
estudiante.mostrarDatos();
}
}