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

12 respostas
W

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

M
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();
W

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.

D

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

W

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

F

Olha se resolve…

menu m = new menu(); //instanciando ,construindo 
m.menu ;
W
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();
F

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

W

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.

F

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

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.

D

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.

W

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