> For the complete documentation index, see [llms.txt](https://educacion.gitbook.io/programacion/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://educacion.gitbook.io/programacion/exercicios-java/ud4-solucions/herdanza-e-visibilidade.md).

# Herdanza e visibilidade

{% @mermaid/diagram content="classDiagram
namespace centro {
class Persona {
-dni: String
\~nome: String
\#idade: int

```
        +Persona()
        +Persona(String, String, int)
        ~presentacion() void
        #dimeAIdade() void
        +getDni() String
    }
    
    class PAS {
        +PAS()
        +PAS(String, String, int)
        +accesoAnome() String
        +accesoAidade() String
    }
}

namespace estudios {
    class Alumno {
        +Alumno()
        +Alumno(String, String, int)
        +nomeAlumno() String
        +idadeAlumno() String
    }
}

Persona <|-- PAS: extends
Persona <|-- Alumno: extends" %}
```

**El atributo nombre y el método presentación llevan el nivel de visibilidad por defecto \~, que por algun motivo el programa no esta representando bien.**

```java
package centro;

public class Persona {
    private String dni;
    String nome;  // visibilidad por defecto (package-private)
    protected int idade;
    
    // Constructor con todos los atributos
    public Persona(String dni, String nome, int idade) {
        this.dni = dni;
        this.nome = nome;
        this.idade = idade;
    }
    
    // Constructor vacío que llama al constructor con todos los atributos
    public Persona() {
        this("", "", 0);
    }
    
    // Método con visibilidad por defecto (package-private)
    void presentacion() {
        System.out.println("O meu nome é " + nome);
    }
    
    // Método con visibilidad protegida
    protected void dimeAIdade() {
        System.out.println("A miña idade é " + idade);
    }
    
    // Getter para dni (privado) - necesario si queremos acceder desde fuera
    public String getDni() {
        return dni;
    }
}
```

```java
package centro;

public class PAS extends Persona {
    
    // Constructor vacío
    public PAS() {
        this("","",0);
    }
    
    // Constructor con tres atributos
    public PAS(String dni, String nome, int idade) {
        super(dni, nome, idade);
    }
    
    // Método para intentar acceder al nombre
    public String accesoAnome() {
            // Intentamos acceder directamente al nombre
            // Como estamos en el mismo paquete, SÍ podemos acceder
            return "Nome accesible: " + this.nome;
 
    }
    
    // Método para intentar acceder a la edad
    public String accesoAidade() {
            // Intentamos acceder directamente a la edad
            // Como es protected, SÍ podemos acceder desde una subclase
            return "Idade accesible: " + this.idade;
    }
    
    public String accesoDNI(){
        //Como é privado, accedemos a traves do getter.
        return "" + this.getDni();
    }
}
```

```java
package estudios;

import centro.Persona;

public class Alumno extends Persona {
    
    // Constructor vacío
    public Alumno() {
        this("","",0);
    }
    
    // Constructor con tres atributos
    public Alumno(String dni, String nome, int idade) {
        super(dni, nome, idade);
    }
    
    // Método para intentar acceder al nombre
    public String nomeAlumno() {
            // Intentamos acceder directamente al nombre
            // Como estamos en paquete diferente, NO podemos acceder a nombre (default/package-private)
            // Esta línea dará error de compilación si la descomentamos:
            // return "Nome accesible: " + nome;
            return "Nome non accesible";
       
    }
    
    // Método para intentar acceder a la edad
    public String idadeAlumno() {
            // Intentamos acceder directamente a la edad
            // Como es protected, SÍ podemos acceder desde una subclase aunque esté en otro paquete
            return "Idade accesible: " + idade;

            return "Idade non accesible";

    }
    
    public String dniAlumno(){
           //Como é privado, accedemos a traves do getter.
            return "" + this.getDni();
        }
}
```

```java
import centro.PAS;
import estudios.Alumno;

public class App {
    public static void main(String[] args) {
        // Instanciar un PAS
        PAS pas = new PAS("12345678A", "María López", 35);
        
        System.out.println("=== Probando métodos de PAS ===");
        System.out.println(pas.accesoAnome());   // Acceso al nombre (mismo paquete)
        System.out.println(pas.accesoAidade());  // Acceso a la edad (protected)
        
        // Instanciar un Alumno
        Alumno alumno = new Alumno("87654321B", "Carlos Gómez", 20);
        
        System.out.println("\n=== Probando métodos de Alumno ===");
        System.out.println(alumno.nomeAlumno());   // No puede acceder al nombre (paquete diferente)
        System.out.println(alumno.idadeAlumno());  // Sí puede acceder a la edad (protected)
        
        System.out.println("\n=== Pruebas adicionales ===");
        
        // Acceso a métodos heredados
        // pas.presentacion(); // Error - presentacion() tiene visibilidad por defecto (package-private)
        // pas.dimeAIdade();   // Error - dimeAIdade() es protected y no se puede acceder desde App
        
        // Acceso a través de getters si existieran
        System.out.println("DNI del PAS: " + pas.getDni());
        System.out.println("DNI del alumno: " + alumno.getDni());
    }
}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://educacion.gitbook.io/programacion/exercicios-java/ud4-solucions/herdanza-e-visibilidade.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
