[RESOLVIDO] Get and Set e Construtores

12 respostas
KamillaaaH

Tô me confundindo muito com isso… Get, Set e Construtores…
É o seguinte, construtores geralmente são usados para criar e atribuir valores às variáveis de instância do objeto, certo?
E os acessadores e modificadores permitem a captura e a configuração de coisas, no caso aqui as variáveis de instância, certo?

Ok, aqui eu crio uma classe Retângulo e o seu construtor com as respectivas variáveis de instância:

package retangulo;


public class Retangulo {


	//criando o construtor
	Retangulo(){
		int point1;
		int point2;
	}

	//métodos Get and Set
	int getPoint1(){
		return point1;

	}

	int setPoint1(int newPoint){
		point1 = newPoint;
	}


	public static void main(String[] args) {

		Retangulo r = new Retangulo();

		r.setPoint1(30);
		System.out.println(r.getPoint1());



	}

}

E no console:

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	point1 cannot be resolved

	at retangulo.Retangulo.setPoint1(Retangulo.java:20)
	at retangulo.Retangulo.main(Retangulo.java:28)

Acho que eu tô fazendo confusão com tudo! T.T
Alguém pode me explicar por qual motivo não posso usar Get e Set para configurar as variáveis de instância que estão no construtor?
Putz… tô realmente muito confusa sobre o que tá acontecendo aí… Além de que point1 e point2 são indicadas como se nunca tivessem sido inicializadas…

Obrigada! o/

12 Respostas

ViniGodoy

Não, não, no construtor você só inicializa os valores. A criação é feita fora dele:

package retangulo;

public class Retangulo {
	int point1;
	int point2;

	//criando o construtor
	Retangulo(){
 	    point1 = 0;
	    point2 = 0;
	}

	//métodos Get and Set
	int getPoint1(){
		return point1;

	}

	int setPoint1(int newPoint){
		point1 = newPoint;
	}

	public static void main(String[] args) {
		Retangulo r = new Retangulo();

		r.setPoint1(30);
		System.out.println(r.getPoint1());
	}
}
E

Troque

public class Retangulo {  
   
   
     //criando o construtor  
     Retangulo(){  
         int point1;  
         int point2;  
     }

por

public class Retangulo {  
     int point1;
     int point2;
     //criando o construtor  
     Retangulo(){  
     }
KamillaaaH

Olha só agora…

package retangulo;
	

public class Retangulo {
	int point1;
	int point2;


	//criando o construtor
	Retangulo(){
		int point1 = 0;
		int point2 = 0;
	}

	//métodos Get and Set
	int getPoint1(){
		return point1;

	}

	int setPoint1(int newPoint){
		 point1 = newPoint;
	}


	public static void main(String[] args) {

		Retangulo r = new Retangulo();

		r.setPoint1(30);
		System.out.println(r.getPoint1());



	}

}

E no console…

Exception in thread "main" java.lang.Error: Unresolved compilation problem: 
	This method must return a result of type int

	at retangulo.Retangulo.setPoint1(Retangulo.java:21)
	at retangulo.Retangulo.main(Retangulo.java:30)
Andre_Fonseca

o seu método setPoint não precisa retornar nada, no caso ele retorna void, pois ele só precisa inicializar a variavel

KamillaaaH

Eu vou ter que usar Set como void então, né?

KamillaaaH

Consegui! o/

=DD

Isso!
Então… alguma dica pra eu ler mais sobre métodos de configuração e construtores? =D

ViniGodoy
Isso. E dentro do construtor você  usa os ints declarados fora. Não precisa escrever a palavra int.

Retangulo(){

[color=red]int[/color] point1 = 0;

[color=red]int[/color] point2 = 0;

}

Se vc escrever não vai dar erro. Mas os points de dentro do construtor não serão os mesmos point declarados fora dele.

KamillaaaH

E mais uma coisa… por qual motivo eu não posso inicializar as variáveis de instância somente no construtor? T.T

KamillaaaH

ENTENDI! =DDD

public class Retangulo {
	int point1;
	int point2;
	
	


	//criando o construtor
	Retangulo(){
		point1=0;
		point2=0;
	}
KamillaaaH

Mas faz sentindo eu criar as variáveis de instância fora e depois inicializar todas no construtor? =S

ViniGodoy
KamillaaaH:
Mas faz sentindo eu criar as variáveis de instância fora e depois inicializar todas no construtor? =S

Na verdade, se a inicilização é direta, não faz sentido. É melhor usar diretamente mesmo:

public class Retangulo {
	int point1 = 0; //isso roda antes de todos os construtores
	int point2 = 0;

	//criando o construtor
	public Retangulo(){
	}
Nesse caso, quando usar no construtor? a) Use quando sua variável não for tão simples assim:
public class Forma {
	List<Integer> pontos = new ArrayList<Integer>(); 

	//criando o construtor
	public Forma(){
           pontos.add(0);
           pontos.add(1);
           pontos.add(2);
	}
b) Use quando você quiser obrigar o usuário a digitar certos parâmetros:
public class Retangulo {

	//criando o construtor
	public Retangulo(int a, int b){
		point1=a;
		point2=b;
	}
c) Use quando sua classe não tiver um "set" para aquele atributo.
public class Retangulo {

	//criando o construtor
	public Retangulo(int a, int b){
		point1=a;
		point2=b;
	}

   public int getPonto1() {
      return point1;
   }
   public int getPonto2() {
      return point2;
   }
}
KamillaaaH

Ahhh! =D
Entendi agora… com esses casos de usos mais específicos fica mais fácil então! =D

Criado 22 de outubro de 2009
Ultima resposta 22 de out. de 2009
Respostas 12
Participantes 4