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 ?
[code] public static void main(String[] args) {
// TODO code application logic here
Numeros num = new Numeros();
Soma soma = new Soma();
num.inserirNum();
soma.soma();
}[/code]
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.
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
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.
Olá DavidsonLss!
Eu fiz deste jeito e deu certo. Não sei explicar. rs
[code]
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;
}
}[/code]
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);
}
}
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.