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!
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.
[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();
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.
Existem duas maneiras de voce invocar um método de uma classe em outra classe.
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