Problema com contrutor da superclasse. [Resolvido]

7 respostas
KaosBr

Boa tarde,

Procurei no google, mas não consegui acertar. Segue abaixo, na imagem, o erro do compilador:

Superclasse:

package heranca;

/**
 *
 * @author KaosBr
 */
public class Pessoa {
    private String nomeCompleto;
    private String rg;
    private String cpf;

    /**
     * Contrutor da classe
     * @param informeNomeCompleto
     * @param informeRG
     * @param informeCPF
     */
    protected Pessoa(String informeNomeCompleto,
            String informeRG,
            String informeCPF) {
        this.nomeCompleto = informeNomeCompleto;
        this.rg = informeRG;
        this.cpf = informeCPF;
    }

    /**
     * Ajusta o valor do nome completo.
     * @param informeNomeCompleto
     */
    protected void setNomeCompleto(String informeNomeCompleto) {
        nomeCompleto = informeNomeCompleto;
    }

    /**
     * Exibe o valor do nome completo.
     * @return
     */
    protected String getNomeCompleto() {
        return nomeCompleto;
    }

    /**
     * Ajusta o valor do RG.
     * @param informeRG
     */
    protected void setRG(String informeRG) {
        rg = informeRG;
    }

    /**
     * Exibe o valor do RG.
     * @return
     */
    protected String getRG() {
        return rg;
    }

    /**
     * Ajusta o valor do CPF.
     * @param informeCPF
     */
    protected void setCPF(String informeCPF) {
        cpf = informeCPF;
    }

    /**
     * Exibe o valor do CPF.
     * @return
     */
    protected String getCPF() {
        return cpf;
    }

}

Subclasse, erro da imagem é exibido na linha 12, do código abaixo:

package heranca;

/**
 *
 * @author KaosBr
 */
public class Estudante extends Pessoa{
    private String ra;
    private String curso;

    Estudante(String informeRA,
            String informeCurso) {
        this.ra = informeRA;
        this.curso = informeCurso;
    }

}

Além do erro, estou com uma outra dúvida, no nome dos paramentros do contrutor. Estão corretos de acordo com a convenção?

[]s

7 Respostas

Felagund

Você te somente um construtor na classe Pessoa.

A classe estudante deve informar esses parametros usando o super para a classe Estudante.

discorpio

Boa tarde KaosBr.

Voce não está encontrando o construtor da super classe Pessoa, porque voce declarou na classe Pessoa o construtor com o modificador [color=red]“Protected”[/color] e isto para construtores não é permitido, porque construtores, muito embora eu me resigne a não aceitar isto, não são métodos.

Modifique o modificador da classe Pessoa para public, assim:

public Pessoa(String informeNomeCompleto,   
            String informeRG,   
            String informeCPF) {   
        this.nomeCompleto = informeNomeCompleto;   
        this.rg = informeRG;   
        this.cpf = informeCPF;   
    }
D

o q vc tem que proteger são as VARIAVEIS e não os metodos…
ai vc xama assim…

Estudante(String nome, int rg, int cpf,String informeRA, String informeCurso) 
{  
       super(nome,rg,cpf);
        this.ra = informeRA;  
        this.curso = informeCurso;  
    }

vlw

discorpio

Olá a todos, sou eu de novo.

É por esta razão que eu custo a aceitar que construtor não é método, eis que o mesmo se comporta como tal.

Fiz aqui um teste com o construtor da classe pessoa com o modificador protegido (protected) e seguindo a dica do nosso amigo Damião Cunha, fiz assim:

// Construtor da classe Pessoa

 protected Pessoa(String informeNomeCompleto,     
        String informeRG,     
        String informeCPF) {     
    this.nomeCompleto = informeNomeCompleto;     
    this.rg = informeRG;     
    this.cpf = informeCPF;     
 }

  // Construtor da classe Estudante
  public Estudante(String nome, int rg, int cpf,String informeRA, String informeCurso)   
 {     
       super(nome,rg,cpf);   
        this.ra = informeRA;     
        this.curso = informeCurso;     
  }

Ai funcionou aqui no NetBeans.

Uma dica que também funcionou aqui no NetBeans, se o nosso amigo KaosBr quiser fazer do jeito dele, então ele pode sobrecarregar o construtor na Classe Pessoa, assim:

// Construtor sobrecarregado da classe Pessoa
 public Pessoa(){
 }
  
 protected Pessoa(String informeNomeCompleto,     
        String informeRG,     
        String informeCPF) {     
    this.nomeCompleto = informeNomeCompleto;     
    this.rg = informeRG;     
    this.cpf = informeCPF;     
 }

Embora tenha funcionado, acredito que não seja recomendado voce proteger construtores.

D

discorpio:
Olá a todos, sou eu de novo.

É por esta razão que eu custo a aceitar que construtor não é método, eis que o mesmo se comporta como tal.

Fiz aqui um teste com o construtor da classe pessoa com o modificador protegido (protected) e seguindo a dica do nosso amigo Damião Cunha, fiz assim:

// Construtor da classe Pessoa

 protected Pessoa(String informeNomeCompleto,     
        String informeRG,     
        String informeCPF) {     
    this.nomeCompleto = informeNomeCompleto;     
    this.rg = informeRG;     
    this.cpf = informeCPF;     
 }

  // Construtor da classe Estudante
  public Estudante(String nome, int rg, int cpf,String informeRA, String informeCurso)   
 {     
       super(nome,rg,cpf);   
        this.ra = informeRA;     
        this.curso = informeCurso;     
  }

Ai funcionou aqui no NetBeans.

Uma dica que também funcionou aqui no NetBeans, se o nosso amigo KaosBr quiser fazer do jeito dele, então ele pode sobrecarregar o construtor na Classe Pessoa, assim:

// Construtor sobrecarregado da classe Pessoa
 public Pessoa(){
 }
  
 protected Pessoa(String informeNomeCompleto,     
        String informeRG,     
        String informeCPF) {     
    this.nomeCompleto = informeNomeCompleto;     
    this.rg = informeRG;     
    this.cpf = informeCPF;     
 }

Embora tenha funcionado, acredito que não seja recomendado voce proteger construtores.

eu respondi daquela forma pq tb não sabia que funcionava…nunk fiz assim…

  • concordo com vc, msm funcionando, é melhor evitar;…
    vlw
KaosBr

Boa noite,

Ajustei o código conformas sugestões passadas, a unica diferença, foi que as variaveis da classe pai. Tiveram sua visão alterada para protected, uma vez que, estava dando problema por ser private.

Por sugestão da IDE, foi criada um metodo private, com o nome de Super. Porém o erro, da imagem continua sendo exibido. No exemplo que havia encontrado, e nos posts deste topico, não encontrei nada dizendo que tinha que criar um metodo na subclasse com nome “Super”.

[]s

KaosBr

Boa noite,

O erro ainda estava se repetindo, pois acabei escrevendo, “Super” com letra maiuscula. Assim que ajustei para “super”, deu certo.

Obrigado :slight_smile:

[]s

Criado 2 de julho de 2010
Ultima resposta 2 de jul. de 2010
Respostas 7
Participantes 4