Llamando a la superclase desde un constructor de subclase en Java

Intento crear un constructor que tome un campo como parámetro, luego lo coloca en un campo que está almacenado en una superclase. Aquí está el código que estoy usando

public crisps(String flavour, int quantity) { this.flavour = super.getFlavour(); this.quantity = quantity; } 

En la superclase, he inicializado el campo con

 private String flavour; 

y tengo un método de acceso

 public String getFlavour() { return flavour; } 

Me aparece un error: “el sabor tiene acceso privado en la superclase “, pero creo que esto no debería importar, ya que estoy llamando al método de acceso que lo devuelve al campo.

    Lo que debes hacer:

    Agrega un constructor a tu súper clase:

     public Superclass { public SuperClass(String flavour) { // super class constructor this.flavour = flavour; } } 

    En la clase de Crisps:

     public Crisps(String flavour, int quantity) { super(flavour); // send flavour to the super class constructor this.quantity = quantity; } 

    Comentarios

    Algunos comentarios a tu pregunta:

    “En la superclase, he inicializado el campo con”

     private String flavour; 

    Esto no es una inicialización, es una statement. Una inicialización es cuando establece un valor.

    “Recibo un error” El sabor tiene acceso privado en la superclase “, pero creo que esto no debería importar ya que estoy llamando al método de acceso que lo devuelve al campo”.

    Cuando llamas a un accesorio (también conocido como getter), está bien, depende de la visibilidad del captador. El problema en tu código es el:

     this.flavour = 

    porque el sabor no es un campo declarado en la clase Crisps, sino en la clase de la cena, por lo que no puedes hacer un acceso directo como ese. deberías usar mi sugerencia o declarar un colocador en la súper clase :

     public void setFlavour(String flavour) { this.flavour = flavour; } 

    Entonces puedes usarlo en la clase infantil:

     public Crisps(String flavour, int quantity) { this.quantity = quantity; super.setFlavour(flavour); } 

    flavour es privado Aunque lo está leyendo desde el método público, lo está asignando a un campo privado, y es probable que no lo haya declarado en esta clase.

    Puede establecer el sabor en protected en la clase principal o definir un setter para ello

    En última instancia, su código realmente no tiene sentido. Incluso si comstackra, sería más o menos: flavour = flavour . Tal vez deberías reconsiderar lo que estás tratando de hacer un poco

    Creo que puede necesitar una comprensión más estricta de Java y Progtwigción Orientada a Objetos.

    http://docs.oracle.com/javase/tutorial/java/concepts/

    Deberías comenzar aquí.

     public crisps(String flavour, int quantity) { super(flavour); this.quantity = quantity; } 

    Esto debería funcionar como ver Docs

    hacer

      private String flavour; 

    público, de lo contrario sus subclases no tendrán acceso a esta Cadena. Su superclase no sabe acerca de la existencia de ninguna subclase. De acuerdo con la documentación de Java, “privado” hace que cualquier variable y método esté disponible dentro de esa clase, donde se haya declarado la variable privada o el método, ninguna clase tiene acceso a ella, ni siquiera a las subclases. Una vez que tenga la oportunidad de su modificador de acceso, no obtendrá ningún error.