Objetos- chamando métodos

Bem com uma variável da classe eu posso chamar métodos da classe ?
Exemplo:
classe Aresta:

public class Aresta
{
	private Vertice vo, vd; // vértice de origem e destino
	private int peso;
	private Color cor; // cor da aresta
	
	public Aresta(Vertice vo, Vertice vd, int peso)//construtor da classe Aresta que recebe vo,vd e o peso
	{
		this.vo = vo;//recebe o vértice de origem
		this.vd = vd;//recebe o vértice de destino
		this.peso = peso;//recebe o peso
		setCor(Color.BLACK);//seta a cor da aresta como preta
	}
	
	/* DEFINE O PESO */
	public void setPeso(int peso)
	{
		this.peso = peso;
	}

	/* RETORNA O PESO */
	public int getPeso()
	{
		return this.peso;	
	}
	
	/* RETORNA O VÉRTICE ORIGEM */
	public Vertice getVo()
	{
		return this.vo;	
	}

	/* RETORNA O VÉRTICE DESTINO */
	public Vertice getVd()
	{
		return this.vd;	
	}
	
	/* DEFINE A COR DA ARESTA */
	public void setCor(Color cor)
	{
		this.cor = cor;	
	}
	
	/* RETORNA A COR DA ARESTA */
	public Color getCor()
	{
		return this.cor;
	}
}

Classe Vértice

public class Vertice
{
	private String rotulo; // rótulo (legenda) do vértice
	private int numero; // nº do vértice
	private int x, y; // coordenadas do vértice na tela
	private boolean marcado; // define se o vértice está marcado ou não
	private Color cor; // cor do vértice desmarcado
	private Color corMarcado; // cor do vértice marcado
	
	public Vertice(int num, String rot, int x, int y) // construtor
	{
		setRotulo(rot);
		setNum(num);
  		desmarcar();
  		setCor(Color.BLACK); // define a cor padrão como BLACK
  		setCorMarcado(Color.BLUE); // define a cor padrão do marcado como BLUE
  		setXY(x, y);
	}
	
	public void setXY(int x, int y)
	{
		this.x = x;
		this.y = y;
	}
	
	public int getX()
	{
		return this.x;
	}
	
	public int getY()
	{
		return this.y;
	}
	
	public void marcar()
	{
		this.marcado = true;
	}
	
	public void desmarcar()
	{
		this.marcado = false;
	}
	
	public boolean getMarcado()
	{
		return this.marcado;	
	}
	
	/* DEFINE O RÓTULO DO VÉRTICE */
	public void setRotulo(String rot)
	{
		this.rotulo = rot;
	}
	
	/* RETORNA O RÓTULO DO VÉRTICE */
	public String getRotulo()
	{
		return this.rotulo;
	}
	
	/* DEFINE O NÚMERO DO VÉRTICE */
	public void setNum(int num)
	{
		this.numero = num;
	}
	
	/* RETORNA O NÚMERO DO VÉRTICE */
	public int getNum()
	{
		return this.numero;
	}
	
	/* DEFINE A COR DO VÉRTICE */
	public void setCor(Color cor)
	{
		this.cor = cor;
	}
	
	/* RETORNA A COR DO VÉRTICE */
	public Color getCor()
	{
		return this.cor;
	}
	
	/* DEFINE A COR DO VÉRTICE MARCADO */
	public void setCorMarcado(Color cor)
	{
		this.corMarcado = cor;
	}
	
	/* RETORNA A COR DO VÉRTICE MARCADO */
	public Color getCorMarcado()
	{
		return this.corMarcado;
	}
}

Tenho está classe que se chama Aresta e tenho váriaveis do tipo Vértice que é de outra classe minha,
são essas as variáveis:
private Vertice vo, vd; // vértice de origem e destino
minha duvida é eu posso chama métodos de classes vértice somente com essas variáveis…? tem um exemplo no código meu que faz exatamente isso vou mostrar a vcs:

Aresta a.getVo().getNum()==vo

o que eu entendi é que a variavel do tipo Aresta chama o método getVo() que por sua vez tem a variável vo que é do tpo vertice que chama o método getNum() que retorna um inteiro é isso mesmo?
eu achama que chamava somente dessa forma
Aresta chama = new Aresta()
qual a diferença??
Aresta chama = new Aresta()
Aresta chama

no construtor vc não teria de passar um this
mas está dando algum erro?
e não entendi muito bem sua dúvida

e simples cara tem como eu chamar algum método de uma classe apenas criando uma váriavel do seu tipo
exemplo:

Vertice vd
vd.getNum()

não instanciei um objeto dessa classe apenas criei uma variavel do seu tipo e
chamei um métdo dessa classe gostaria de saber se é realmente assim que acontece.

Para chamar um método de uma classe, supondo que este método não seja estático, você deve sim criar um objeto dela. Se você simplesmente não atribuir uma referência a uma variável de referência, sendo esta váriavel loca, o seu código sequer compilará, e o compilador acusará que a variável não foi inicializada. Exemplo:

[code]public class Teste
{
public static void main(String[] args)
{
String string;

  System.out.println(string.toLowerCase());

}
}[/code]

Caso a classe tenha váriaveis de referência como variáveis de instância, elas seriam inicializadas com null por padrão quando você criar um objeto desta classe. Sendo assim, elas terão um valor, portanto o compilador não o impedirá de chamar um método usando-as, no entanto, como o valor será null, ocorrerá em tempo de execução a exceção NullPointerException. Exemplo:

[code]public class Aluno
{
private String nome;

public String getNome()
{
return nome;
}
}[/code]

[code]public class Teste
{
private String string;

public static void main(String[] args)
{
Aluno aluno = new Aluno();

  System.out.println(aluno.getNome().toLowerCase());

}
}[/code]
De qualquer forma, o importante é saber que não se pode chamar um método em uma variável de instância que ainda não foi inicializada ou que contém o valor null.

vc pode evitar o fato deretornar null por exempo

public class auno{ public String nome = " "; public String getNome(){ return this.nome; } public static void main(String[] args){ auno teste = new auno(); System.out.println(teste.getNome()); } }

Cara so pra ver se eu entendi quando eu crio uma variável de instância
exemplo:

public class Exemplo
{

   String a;//está é uma variável de instância da classe String 
              //mas nada referência a ela então ela tem o valor null
            // devido a isso não posso chamar métodos da classe



}

mas cara dessa forma tem jeito

public class Exemplo
{

   String a;//começa com null
   a="ei";
           
    System.out.println(a.toLowerCase());

}

Cara dai vem minha dúvida não criei um objeto da classe String apenas setei seu valor que era de null para “ei” dai teve como eu chamar métodos
da classe String porque é possivel fazer isso uma vez que não crio um objeto da classe

?

[code]public class aluno{
private String nome = “”;
public void getNome(){
return this.nome;
}
}

public class teste{
public static void main(String[] args){
aluno test = new aluno();
System.out.println(test.getNome());
}
}[/code]

[quote=Puppets]
Cara dai vem minha dúvida não criei um objeto da classe String apenas setei seu valor que era de null para “ei” dai teve como eu chamar métodos
da classe String porque é possivel fazer isso uma vez que não crio um objeto da classe[/quote]

quando você faz:

String a;
a = "ei";

Você está criando sim um objeto da classe String.
Isto é a mesma coisa que fazer isto:

String a = new String("ei");

As duas maneiras criam um objetos String, com uma diferença:
A primeira verifica se ja tem um objeto String igual na memeoria, se tiver ele aponta pra este objeto.
A segunda simplesmente cria um objeto novo.

pelo que eu não entendi eu diria “reflection”

abraço