Dúvidas Básicas

3 respostas
K

Estou estudando um tutorial e me deparei com uma dúvida.
Foi fornecido um exemplo simples de contador, com duas classes, ai vai:
//Classe Contador, arquivo Contador.Java

public class Contador{

public int num; //este é o atributo
//numero do contador

public void incrementa()

//incrementa contador

{

num=num+1; //acesso ao atributo

}

public void decrementa()

//decrementa contador

{

num=num-1;

}
public void comeca(int n)

//começa a contar

{

num=n;

}

}

a outra classe é:
//Class principal, Arquivo Princ.Java

public class Principal{

public static void main(String args[]){

Contador umcont;

//declaração de atributo contador

umcont=new Contador();
//alocação

umcont.comeca(10);
System.out.println(umcont.num);

umcont.incrementa();
System.out.println(umcont.num);

umcont.decrementa();

System.out.println(umcont.num);

}

}

Agora vem a dúvida.
Pra que ao chamar a Classe Contador, dentro da principal é agregado o umcont (Contador umcont;), não poderia usar somente Contador e assim sendo usar também:
Contador.decrementa(); e não
umcont.decrementa();
Se não pode, alguém poderia me esplicar o motivo, para que eu possa desempacar e continuar os estudos.
Muito Grato!!!
:?:

3 Respostas

seduardo

Você não pode efetuar a chamada de métodos de uma classe diretamente a não ser que estes métodos sejam estaticos, e para isto seus dados também tem que ser estáticos. Uma alternativa seria o seguinte :

//Classe Contador, arquivo Contador.Java
public class Contador{

public static int num; //este é o atributo
//numero do contador

public static void incrementa()  //incrementa contador

{

num=num+1; //acesso ao atributo

}
public static void decrementa() //decrementa contador

{

num=num-1;

}
public static void comeca(int n) //começa a contar

{

num=n;

}

}

a outra classe é:
//Class principal, Arquivo Princ.Java

public class Principal{

public static void main(String args[]){

Contador.comeca(10);

System.out.println(Contador.num);
Contador.incrementa();
System.out.println(Contador.num);

Contador.decrementa();
System.out.println(Contador.num);

}
}

Porém é bom salientar que isto impede que você tenha outra instância do contador, portando instanciando permite que voce crie objetos distintos com valores independêntes.

J

olá dseduardo, este seu exemplo nao estaria incorreto?
porque vc esta declarando metodos estáticos em uma classe e os chamando em uma outra classe, os métodos,atributos quando são estáticos podem ser chamados somente na propria classe q os definiu?!

elvishr

coloque somente os atributos static.

public static int num;

:slight_smile:

Criado 28 de abril de 2003
Ultima resposta 30 de abr. de 2003
Respostas 3
Participantes 4