Entendo POO

06/06/2019

0

Olá galera, to com um dúvida que para muitos deve ser besteira, mas pra mim ta difícil, bom eu entendi na teoria o que é Herança, mas to com dúvida para resolver a seguinte questão.
Informe abaixo uma classe chamada Programador, que respeite as regras abaixo:

Contenha uma propriedade privada linguagem textual;
A proprieade deve ser iniciada no construtor da classe;
Sobrescreva o método showInfo() da superclasse;
Exiba os dados do "Programador".
Entrada de dados

Carlos Silva
33
Java

Saída esperada

Carlos Silva
33
Java
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

class Pessoa
{
private String nome;
private int idade;

public Pessoa(String nome, int idade)
{
this.nome = nome;
this.idade = idade;
}

public void showInfo()
{
System.out.println(nome);
System.out.println(idade);
}
}

//meu código
class Programador extends Pessoa {
private String linguagem;

public Programador(String nome, int idade, String linguagemn){
this.nome = nome;
this.idade = idade;
this.linguagem = linguagem;
}

@Override
public void showInfo(){
System.out.println(Programador.nome);
System.out.println(Programador.idade);
}
}

public class Programa
{
public static void main(String []args){
Scanner scann = new Scanner(System.in);

Pessoa a = new Programador(scann.nextLine(), Integer.valueOf(scann.nextLine()), scann.nextLine());

a.showInfo();
}
}
Diego Wenndson

Diego Wenndson

Responder

Posts

07/06/2019

Alex William

Olá, amigo.

Vamos por parte:

Primeiro, atributos "private" não podem ser acessados fora da classe, portanto para setar o nome e a idade, elas tem que ser "public" na classe "Pessoa";

Segundo voce tem uma classe abstrata "Pessoa" com um construtor. Toda a vez que você chama-la, ele vai chamar o construtor até mesmo no extends;

Eu coloquei o metodo com outro nome dentro da classe pessoa, deixando assim:
class Pessoa {
    public String nome;
    public int idade;

    public void setPessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    public void showInfo() {
        System.out.println(nome);
        System.out.println(idade);
    }
}


Depois disso, a mesma coisa em programador, porem uma coisa é que no seu parametro de entrada você tem "linguagem" que é o mesmo nome do seu atributo. Isso gera um conflito, por isso eu mudei o nome no metodo.

Como a classe Programador estende Pessoa, eu posso chamar setPessoa sem precisar estanciar o objeto(Pessoa x = new Pessoa()).

Deixei sua classe assim:
class Programador extends Pessoa {
    public String linguagem;

    public Programador(String nome, int idade, String inLinguagemn){
        setPessoa(nome, idade);
        this.linguagem = inLinguagemn;
    }

    @Override
    public void showInfo(){
        System.out.println(this.nome);
        System.out.println(this.idade);
        System.out.println(this.linguagem);
    }
}


Sua classe Programa não possui erro nenhum a principio.
class Programa {
    public static void main(String []args){
        
        Scanner scann = new Scanner(System.in);
        
        Pessoa a = new Programador(scann.nextLine(), Integer.valueOf(scann.nextLine()), scann.nextLine());

        a.showInfo();
    }
}


Vamos explicar sobre herança:

Quando você estende uma classe em outra, a classe "filha" herda todos os metodos e atributos publicos, não precisando que você declare eles novamente. Bem como podendo chama-los sem precisar estanciar um objeto para eles.

No básico seria isso.

Qualquer coisa, você pode especificar melhor sua duvida.

Espero ter ajudado. :D
Responder

07/06/2019

Diego Wenndson

Olá, amigo.

Vamos por parte:

Primeiro, atributos "private" não podem ser acessados fora da classe, portanto para setar o nome e a idade, elas tem que ser "public" na classe "Pessoa";

Segundo voce tem uma classe abstrata "Pessoa" com um construtor. Toda a vez que você chama-la, ele vai chamar o construtor até mesmo no extends;

Eu coloquei o metodo com outro nome dentro da classe pessoa, deixando assim:
class Pessoa {
    public String nome;
    public int idade;

    public void setPessoa(String nome, int idade) {
        this.nome = nome;
        this.idade = idade;
    }

    public void showInfo() {
        System.out.println(nome);
        System.out.println(idade);
    }
}


Depois disso, a mesma coisa em programador, porem uma coisa é que no seu parametro de entrada você tem "linguagem" que é o mesmo nome do seu atributo. Isso gera um conflito, por isso eu mudei o nome no metodo.

Como a classe Programador estende Pessoa, eu posso chamar setPessoa sem precisar estanciar o objeto(Pessoa x = new Pessoa()).

Deixei sua classe assim:
class Programador extends Pessoa {
    public String linguagem;

    public Programador(String nome, int idade, String inLinguagemn){
        setPessoa(nome, idade);
        this.linguagem = inLinguagemn;
    }

    @Override
    public void showInfo(){
        System.out.println(this.nome);
        System.out.println(this.idade);
        System.out.println(this.linguagem);
    }
}


Sua classe Programa não possui erro nenhum a principio.
class Programa {
    public static void main(String []args){
        
        Scanner scann = new Scanner(System.in);
        
        Pessoa a = new Programador(scann.nextLine(), Integer.valueOf(scann.nextLine()), scann.nextLine());

        a.showInfo();
    }
}


Vamos explicar sobre herança:

Quando você estende uma classe em outra, a classe "filha" herda todos os metodos e atributos publicos, não precisando que você declare eles novamente. Bem como podendo chama-los sem precisar estanciar um objeto para eles.

No básico seria isso.

Qualquer coisa, você pode especificar melhor sua duvida.

Espero ter ajudado. :D


Opa amigo eu conseguir resolve da sim para acessar os atributos eles estando privados, pois os mesmo estão encapsulados.

Para resolve o meu problema tive apenas que fazer o seguinte. " Apenas nada demorei horas kkkk"
class Programador extends Pessoa {
    private String linguagem;

    public Programador(String nome, int idade, String Linguagem){
        setPessoa(nome, idade);
        this.linguagem = Linguagem;
    }

    @Override
    public void showInfo(){
        super.showInfo();
        System.out.println(linguagem);
    }
}
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar