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

12 respostas
worlock257

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:

// 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.
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;
	}
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();
				
	}
}
	
}
}

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

12 Respostas

mitgan
Tenho uma sugestão, não garanto que seja a melhor forma de implementa-la, mais já quebra o galho.
*
 * 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(){
        
    }
}

E nas outras classes vc chama assim:

teste.instancia().testando();
worlock257

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.

Dulcyelliton

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

worlock257

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

fabin

Olha se resolve…

menu m = new menu(); //instanciando ,construindo 
m.menu ;
worlock257
fabin:
Olha se resolve....
menu m = new menu(); //instanciando ,construindo 
m.menu ;

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();
fabin

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

worlock257

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.

fabin

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;      
    }
pmlm

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.

discorpio

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.

worlock257

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

Criado 24 de junho de 2011
Ultima resposta 25 de jun. de 2011
Respostas 12
Participantes 6