Duvida em herança de variaveis

4 respostas
L

olá galera,
preciso da ajuda de vocês! é o seguinte, eu tenho tres variavel int x=10 , int y=20 e boolean a=true por exemplo no metodo main certo.
ai eu crio um novo metodo dentro desta mesma classe que contem o metodo main. Q CHAMEI DE FASE!
queria saber se tem jeito deste novo metodo receber como herança a variavel x, y e a, com o valor vindo do metodo main, ou seja x=10 e y=20, a=true!!!
e se tem jeito de modificar estas variaveis dentro deste metodo, e automaticamente retornar a mudança nas 3 variaveis no metodo main! pois como o metodo tem q retornar 2 tipos de variaveis diferentes, não da pra usar nada do tipo int fase(), ou boolean fase()

por exemplo, o programa abaixo, q naum compila:

class teste{

public static void main(String[] arg)

int x=10;

int y=20;

boolean a=true;

fase();

System.out.println(x);

System.out.println(y);

System.out.println(a);

}
void fase(){

if(a==true){

x++;

y;}

else y++;

a=false;

}

}

eu quero que quando imprimir as variaveis, imprima x=11, y =19 e a=false

POR FAVOR, ALGUEM ME AJUDA! :sad:

4 Respostas

BrunoBastosPJ

Opa rapaz, o programa não compila porque você está tentando chamar um método de instância que é o fase() dentro de um método de classe que é estático main()… E as variáveis dentro do método fase() não existem também. Você não usa herança em métodos, você usa parâmetros para fazer o que vocÊ quer… Porem com tipos primitivos, que são os booleans, ints etc. O valor que eles recebem no método são cópias e não são alterados.

Com objetos acontece a mesma coisa, porém você passa uma cópia da variável de referência, que referencia o mesmo objeto que a outra variável estava referênciando. Ou seja, qualquer mudança que fizer nessa variável vai alterar o estado do objeto (Qualquer mudança que não seja referencia-la para outro objeto claro).

As maneiras que você pode fazer isso são tornando as variáveis x y e a variáveis de instância (deve declara-las logo depois da declaração da classe). Ou torna-las objetos warppers Integers e Booleans

J

String, Integer, Boolean, Long, Double, etc… são imutaveis!

I

Complementando o que já foi dito pelos demais colegas, parece que os conceitos de escopo de variáveis não estão muito claros para ti lordone. No Java há 3 escopos:

[list]

  1. variáveis de escopo global (de instância e de classe);
  2. variáveis de escopo de parâmetro (declaradas em métodos);
  3. variáveis de método (declaradas dentro de um método);
    [/list]

No primeiro todas as variáveis declaradas no corpo da classe (fora de qualquer método ou construtor) serão vistas de qualquer método. A questão da herança destes valores vai depender do tipo de modificador de acesso com o qual tu declara ele.

No segundo são as variáveis declaradas no cabeçalho dos métodos, que são vistos na chamada do método (definindo o tipo de valor que deve ser passado) e dentro do corpo do método em que está declarada

No terceiro as variáveis declaradas dentro do corpo dos métodos só serão “vistos” lá dentro.

Sugiro que tu dê uma estudada em:

  • escopo de variáveis;
  • modificadores de acesso;
  • encapsulamento;

Boa sorte, T+

S
"lordone":
olá galera, preciso da ajuda de vocês! é o seguinte, eu tenho tres variavel int x=10 , int y=20 e boolean a=true por exemplo no metodo main certo. ai eu crio um novo metodo dentro desta mesma classe que contem o metodo main. Q CHAMEI DE FASE! queria saber se tem jeito deste novo metodo receber como herança a variavel x, y e a, com o valor vindo do metodo main, ou seja x=10 e y=20, a=true!!! e se tem jeito de modificar estas variaveis dentro deste metodo, e automaticamente retornar a mudança nas 3 variaveis no metodo main! pois como o metodo tem q retornar 2 tipos de variaveis diferentes, não da pra usar nada do tipo int fase(), ou boolean fase()

por exemplo, o programa abaixo, q naum compila:

class teste{
public static void main(String[] arg)
int x=10;
int y=20;
boolean a=true;
fase();
System.out.println(x);
System.out.println(y);
System.out.println(a);
}

void fase(){
if(a==true){
x++;
y--;}
else y++;

a=false;

}

}

eu quero que quando imprimir as variaveis, imprima x=11, y =19 e a=false

POR FAVOR, ALGUEM ME AJUDA! :sad:

Você pudia tentar usar algo assim
public class Teste1 {
	
	static int x=10, y=20;
	static boolean a=true;
	
	
	static void fase(){
		
		if(a==true){
			x++;
			y--;
		}else y++;

		a=false;

			 
		
	}

	public static void main(String[] args) {
		fase();
		System.out.println(x+", "+y+", "+a);
	}
		
}
Criado 28 de novembro de 2006
Ultima resposta 28 de nov. de 2006
Respostas 4
Participantes 5