Problemas passagem de valores

6 respostas
D

Queria saber porque não estou conseguindo herdar os valores de uma classe, somar elas em outra e executar tudo isso no Main.

Recebe os 2 numeros a serem somados:

import java.util.Scanner;
public class Numeros {

     protected double num1;
     protected double num2;

    Scanner input = new Scanner(System.in);

    public void inserirNum(){

        System.out.println("");
        num1 = input.nextDouble();

        System.out.println("");
        num2 = input.nextDouble();

    }

    public double getNum1() {
        return num1;
    }


    public void setNum1(double num1) {
        this.num1 = num1;
    }



    public double getNum2() {
        return num2;
    }


    public void setNum2(double num2) {
        this.num2 = num2;
    }



}

Efetua a soma :
Obs: Para somar posso chamar as variaveis diretamente ou tem que ser pelo get ?

public class Soma extends Numeros {
    
    protected double resultado;
    Numeros a = new Numeros();

    public void soma(){

       resultado= a.getNum1()+a.getNum2(); // ou a.num1+a.num2 ?
       System.out.println("O resultado da soma é : " +resultado);


    }

}
Edit: Falta alguma coisa no main ?
public static void main(String[] args) {
        // TODO code application logic here

        Numeros num = new Numeros();
        Soma soma = new Soma();

        num.inserirNum();
        soma.soma();
        


    }

E o Main chamando os metodos.

Só para deixar claro, sou novo com linguagens e estou estudando por conta propia. O código é "besta" mas estou simplesmente praticando.

Desde ja agradeço a possivel ajuda.

6 Respostas

A

DavidsonLss bem vindo ao GUJ.

Referente a sua duvida, você pode acessar a variavel tanto pelo metodo get’s como pela variavel, já que você declarou ela como protected.
O mais comum seria, declarar a variavel como private e os metodos get’s/set’s como public…

É interessante ler mais a respeito de modificadores.
A regra básica é assim:

  • private : Sem acesso
  • Sem modificadores: Acesso apenas as classes do mesmo pacote (No seu caso é os metodos gets/sets)
  • protected: Por herança ou classes no mesmo pacote (No caso suas variaveis)
  • public: Acesso de qualquer classe e qualquer pacote

Att

WendersonLP

Bem, quando você extende uma classe que tenha atributos ou métodos (public, protected) você poderá
acessá-los diretamente.
Não sei se você já tem, mas baixe algum livro ou apostila que será bem mais fácil de você aprender
tanto programação, quanto a lógica. Já que você é auto-didata.

D
wellington.nogueira:
tente assim...
public static void main(String[] args) {   
    Soma soma = new Soma();   
  
    soma.inserirNum();   
    soma.soma();   
       
}

Deu na mesma, o resultado só da 0.0.

Mesmo assim, obrigado :wink:

J

Olá DavidsonLss!
Eu fiz deste jeito e deu certo. Não sei explicar. rs

package pacotes;

import java.util.Scanner;

public class Numeros {

	protected double num1;
	protected double num2;

	Scanner lerTeclado = new Scanner(System.in);
	
	public void inserirNum() {
		System.out.print("Digite um número: ");
		num1 = lerTeclado.nextDouble();
		
		System.out.print("Digite um número: ");
		num2 = lerTeclado.nextDouble();
	}

	public double getNum1() {
		return num1;
	}

	public void setNum1(double num1) {
		this.num1 = num1;
	}

	public double getNum2() {
		return num2;
	}

	public void setNum2(double num2) {
		this.num2 = num2;
	}

}
package pacotes;

public class Soma extends Numeros {

	protected double resultado;
		
	public void somar(Numeros numeros){
		resultado = numeros.getNum1() + numeros.getNum2();
		System.out.println("O resultado da soma é:" + resultado);
				
	}
	
}
package pacotes;

public class Programa {

	public static void main(String[] args) {
		Numeros numeros = new Numeros();
		Soma soma = new Soma();
		
		numeros.inserirNum();
		soma.somar(numeros);
	}
	
}
Talvez o pessoal do GUJ possa ajudar!
ctosin

DavidsonLss,

O problema é que você está criando um objeto do tipo Numeros na sua classe Soma. A sua classe já herda de Numeros, você não precisa desse objeto. Observe:

public class Soma extends Numeros {
    
    protected double resultado;

    public void soma(){
       resultado= getNum1() + getNum2(); //estes métodos estão definidos na superclasse
       System.out.println("O resultado da soma é : " + resultado);
    }
}

Da forma como estava sendo feito, o objeto onde você chama o método inserirNum() era diferente do objeto de onde você lia os números inseridos (getNum1() e getNum2()). Por isto o retorno era 0.

Abraço

WellingtonRamos
tente assim...
public static void main(String[] args) {   
    Soma soma = new Soma();   
  
    soma.inserirNum();   
    soma.soma();   
       
}
Criado 10 de maio de 2010
Ultima resposta 10 de mai. de 2010
Respostas 6
Participantes 6