Como faço para um método chamar outro método de outra classe?

Galera isso parece até simples mas minha cabeça tá fritando aqui!

Quero chamar um método de outra classe e não sei como fazer:

[code] // Essa é uma classe!
package sistemaáreo;

import java.util.Scanner;

public class FirstClass{
Scanner S = new Scanner (System.in);
private boolean [] classe = new boolean [11];

public void firstClass () // Primeira classe.
{
	menu(); // Aqui deve chamar o métodode outra classe.

[/code]


package sistemaáreo;
import java.util.Scanner;

public class Menu {
	
	Scanner input = new Scanner (System.in);
	
	private String boasVindas;
	int escolhaClasse;
	FirstClass ft = new FirstClass();
	
	
	public Menu (String boasV){
		
		this.boasVindas = boasV;	
	}
	
	public String getBoasV (){
		
		return boasVindas;
	}
public void menu () //Tento chama esse método.
{	
	
	
	System.out.println("Por favor escolha a classe:");
	
	System.out.println("\nDigite: \n1 para a primeira classe. " +
			"\n2 para a segunda classe");
	escolhaClasse = input.nextInt();
	
	switch (escolhaClasse) {
	case 1:
		ft.firstClass();			
		break;
		
	case 2: 
		ft.economy();
		
	default:
		System.out.println("Escolha errada, saindo do programa.");
		
		break;
	}

[code]
package sistemaáreo;

public class ClassesTeste { //Aqui é minha classe main que aiinda não tá pronta.

public static void main(String[] args) {
			
	Menu m = new Menu ("Bem vindo ao sistema de transporte aéreo");
	System.out.println ("\t\t\t\t\t" + m.getBoasV());
	m.menu();
			
}

}

}
}[/code]

Bom é isso, o programa ainda não tá pronto e não liguem pra lógica, tenho que consertar!

[code]*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package tela;

/**
*

  • @author Administrador
    */
    public class teste {

    private static teste instancia;

    public teste() {
    }

    public static teste instancia() {
    if (instancia == null) {
    instancia = new teste();
    }
    return instancia;
    }

    public void testando(){

    }
    }[/code]

E nas outras classes vc chama assim:

teste.instancia().testando();

Outra pergunta, chamar um método de outra classe é algo normal na programação java ou seria algo mais elaborado como mitgan demonstrou? Eu tinha em mente que era algo na sintaxe que tava faltando.

É algo normal sim!!! Eu utilizo os métodos get e set.

Mas com set e get eu consigo chamar um método de outra classe? Ou consigo chamar apenas a variável?

Olha se resolve…

menu m = new menu(); //instanciando ,construindo 
m.menu ;

[quote=fabin]Olha se resolve…

[code]
menu m = new menu(); //instanciando ,construindo
m.menu ;

[/code][/quote]

Deu certo! Vlw fabin.
O que eu estava em dúvida é que como eu já havia instanciado o objeto menu na classe main eu não poderia instanciar de novo em outra classe. Mas parece que não tem problema, eu só não entendi por q eu tive que colocar null entre pareteses.

public void firstClass () // Primeira classe.
	{
		Menu men = new Menu (null);// Por q desse null?
		men.menu();

Não era para aparecer,

a IDE completou o codigo colocando como null??

tenta desse jeito

Menu men = new Menu();
men.menu;

qualquer coisa utiliza a tecla de atalho p/ auto-completar , Crtl+espaco.

Para voce que esta iniciando, de uma lida na apostila da Caelum fj-11

Se eu coloco sem o null aparece um erro falando. The constructor Menu () is undefined. Ctrl + espaço ele completa como null e funciona blz. Mas gostaria de saber por q desse null.

Pq não esta passando nd como paramentro

olha esse metodo com o mesmo nome da classe que é o construtor

       public Menu (String boasV){ //parametro 
          
        this.boasVindas = boasV;      
    }  

Se tu chamas a classe do menu e depois queres chamar novamente o menu da classe, o correcto seria:

 public void firstClass (Menu menu) 
    {  
        menu.menu(); // Aqui chama o método menu da class Menu
case 1:  
        ft.firstClass(this); //passa o próprio menu para o método     

No entanto, não estou vendo a lógica de quereres chamar o menu dentro de outra classe.

Bom dia a todos.

Existem duas maneiras de voce invocar um método de uma classe em outra classe.

  1. De forma dinâmica:

    Esta é a forma tradicional onde voce instancia o objeto, para poder utilizar os seus métodos, através da referência de instância, a variável objeto, como já foi explicado aqui

2) De forma estática

Esta forma voce não precisa instaciar o objeto, basta apenas fazer referência com o nome da classe para invocar seus métodos, é necessário que voce declare os métodos como estáticos. Ex.
   package sistemaáreo;  
import java.util.Scanner;  
  
public class Menu {  
      
    Scanner input = new Scanner (System.in);
  
     // Declarando o atributo como estático 
    private static String boasVindas;
  
    int escolhaClasse;  
    FirstClass ft = new FirstClass();  
  
    
    // Declarando o método como estático  
    public static String getBoasV (){  
        return boasVindas;  
    }

    // Declarando o método como estático
    public static void setBoasV(String boasV) {
        Menu.boasVindas = boasV;
    } 

    // Declarando o método como estático  
    public static void menu () {    //Tento chama esse método.     
      
         System.out.println("Por favor escolha a classe:");  
      
         System.out.println("\nDigite: \n1 para a primeira classe.\n2 para a segunda classe");  
              escolhaClasse = input.nextInt();  
      
              switch (escolhaClasse) {  
                  case 1:  
                      ft.firstClass();              
                      break;  
          
                  case 2:   
                      ft.economy();  
          
                  default:  
                      System.out.println("Escolha errada, saindo do programa.");  
                      break;  
              }  
   }
}
  
....
.....

package sistemaáreo;  
  
public class ClassesTeste { //Aqui é minha classe main que aiinda não tá pronta.  
      
  
    public static void main(String[] args) {  
                  
        Menu.setBoasV("Bem vindo ao sistema de transporte aéreo");
        System.out.println ("\t\t\t\t\t" + Menu.getBoasV());  
        Menu.menu();  
                  
    }  
}  

  

Alguns comentários sobre métodos estáticos:

Embora métodos estáticos possam ser declarados em escopo de classes, no caso a classe Menu, eles não são membros de instâncias de classe (Objeto), assim sendo, se voce instanciar a classe Menu, várias vezes, todas as instâncias terão o mesmo o valor para o atributo (variável) boasVindas, razão pela qual foi necessário também declarar essa variável como estática, senão ela não seria enxergada dentro do método estático e nem utilizada.

Apesar das linguagens orientada a objetos, oferecerem o recurso dos métodos e atributos estáticos, é sempre recomendável que voce encapsule os atributos através dos seus métodos tradicionalmente com a forma dinâmica, ou seja, deixando seus atributos e métodos independente para cada objeto, isto porque a primeiro coisa que o JVM faz ao interpretar um arquivo .class ou .jar, é procurar todos os métodos e atributos estáticos para alocarem os mesmos em memória, estes ficam lá enquanto a sua aplicação estiver rodando, enquanto que os métodos dinâmicos só ficam em memória enquanto a instância (Objeto) estiver em memória.

Muito obrigado a todos, conseguir resolver o problema com o método static. Vlw discorpio pela dica do static.
Recomendo todos que tiverem dúvidas sobre static olharem esse ótimo artigo sobre o assunto:
http://www.guj.com.br/java/1076-entendendo-static