[RESOLVIDO] Get and Set e Construtores

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/

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

[code]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());
}

}
[/code]

Troque

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

por

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

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)

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

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

Consegui! o/

=DD

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

Isso. E dentro do construtor você só 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.

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

ENTENDI! =DDD

public class Retangulo {
	int point1;
	int point2;
	
	


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

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:

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

//criando o construtor
public Retangulo(){
}

[/code]

Nesse caso, quando usar no construtor?
a) Use quando sua variável não for tão simples assim:

[code]public class Forma {
List pontos = new ArrayList();

//criando o construtor
public Forma(){
       pontos.add(0);
       pontos.add(1);
       pontos.add(2);
}[/code]

b) Use quando você quiser obrigar o usuário a digitar certos parâmetros:

[code]public class Retangulo {

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

c) Use quando sua classe não tiver um “set” para aquele atributo.

[code]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;
}
}[/code]

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