Java - Ayuda con Ejercicio

 
Vista:

Ayuda con Ejercicio

Publicado por Adrian (1 intervención) el 30/10/2018 00:16:27
Hola, me podrían ayudar con un codigo, me lo pasaron como ejercicio en clase, sin embargo, me aparece error al momento de compilar, alguien sabe que es lo que esta incorrecto o que debo cambiar para que compile?. ¡Saludos!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class PrivateyFinal {
    public static void main(String[] args) {
         Padre p = new Padre();
         p.saludo();
    }
}
 
class Padre {
    public final void saludo() {
        System.out.println("Padre");
    }
    private Padre() { this("A"); }
    private Padre(String a) { }
}
 
class Hijo extends Padre {
    protected final void saludo() {
        System.out.println("Hijo");
    }
    private Hijo(String g) { super(); }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con Ejercicio

Publicado por Kabuto (1381 intervenciones) el 30/10/2018 00:47:45
Para empezar, he de decir que es un código, algo raro... por decirlo de algún modo...

En cualquier caso, los constructores de Padre y de Hijo no pueden ser private, han de ser public. De lo contrario no son visibles y no se puede crear un objeto a partir de ellos.
Los constructores han de ser public

Luego, la clase Hijo intenta sobreescribir el metodo saludo() que hereda de Padre.
Pero no puede hacerlo, porque en Padre dicho metodo está declarado como final, es decir, es inmodificable.

Además, de final, está declarado como public en Padre, pero luego Hijo al sobreescribirlo pretende hacerlo protected.
Esto tampoco es posible, al sobreescribir un método heredado, no se le puede reducir la visibilidad. Se puede ampliar, es decir, de protected si podemos sobreescribir a public, pero de public no podemos sobreescribir a protected ni a private.

Total, que en la clase padre hay que quitar el atributo final al metodo saludo().

Y en la clase Hijo hay que cambiar lo de protected por public.

Con estos cambios, ya sí compilará.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar