无法从 Java 中的另一个 class 调用方法
Can't call method from another class in Java
我是 Java 的新手,老实说,目前它的 OOP 重点对我来说相当费力。
对于一个我们打算练习这个重点的 Uni 项目,我的任务是创建至少 2 个 classes:
一个 class 应该用于航空公司客户,另一个 class 应该包含注册购买的方法。
我有一个主文件,一个 Persona(人)class,和一个 RegistroCompra(购买注册)class。 Person 应该具有以下所有属性,我将它们作为私有变量处理,以便 Person 的每个实例都可以获得它们自己的一个。
(要求的属性是个人数据、票号、座位号等)
public class Persona {
private String nombrePasajero;
private String apellidoPasajero;
private String generoPasajero;
private String pasaportePasajero;
private String numTiquetePasajero;
private String numVueloPasajero;
private String destinoPasajero;
private String asientoString;
private int precioBoleto;
private int edadPasajero;
private int numAsientoPasajero;
//Constructor
public Persona(String nombre, String apellido, String genero, int edad, String pasaporte) {
nombrePasajero = nombre;
apellidoPasajero = apellido;
generoPasajero = genero;
pasaportePasajero = pasaporte;
edadPasajero = edad;
}
public void setDestino() {
destinoPasajero = RegistroCompra.obtenerDestino();
}
还有我的RegistroCompra class,它的意思是设置与个人信息无关的数据,而是与目的地、航班号等信息相关的数据。 RegistroCompra 中的所有数据集都必须由 Persona 获取,因为只有 Persona 会在 main 中打印以验证所有信息。
public class RegistroCompra {
private String destino;
public void seleccionarDestino() {
Scanner input = new Scanner(System.in);
System.out.println("Por favor digite el destino, las opciones actuales son Nicaragua o Panama\n");
String destino = input.nextLine();
}
public String obtenerDestino() {
return destino;
}
}
但是,我在 Persona.setDestino() 方法中遇到错误,显示 "non-static method obtenerDestino cannot be referenced from astatic context"
我不明白为什么会这样。如果我尝试将 RegistroCompra.obtenerDestino() 转换为静态方法,则会出现错误,因为 "destino is a non static variable",但它在 RegistroCompra class 中被定义为 public...
您必须执行以下操作:
public class Persona {
...
//You should have instance of RegistroCompra
RegistroCompra registraCompra = new RegistroCompra();
public void setDestino() {
//Option 1: Explicitly call the method
registraCompra.seleccionarDestino();
destinoPasajero = registraCompra.obtenerDestino();
}
}
public class RegistroCompra {
private String destino;
public RegistroCompra(){
//Option 2 : Call the method in constructor
registraCompra();
}
public void seleccionarDestino() {
...
//Set the input to the class level variable destino
this.destino = input.nextLine();
}
public String obtenerDestino() {
return this.destino;
}
}
您在没有实例的情况下调用实例方法。在能够调用实例方法之前,您必须实例化 class(从 class 创建一个实例)。
您可以这样做,使 destino
变量和 obtenerDestino()
方法静态化。检查以下对 RegistroCompra
class:
的更改
public class RegistroCompra {
private static String destino;
public void seleccionarDestino() {
Scanner input = new Scanner(System.in);
System.out.println("Por favor digite el destino, las opciones actuales son Nicaragua o Panama\n");
String destino = input.nextLine();
}
public static String obtenerDestino() {
return destino;
}
}
我是 Java 的新手,老实说,目前它的 OOP 重点对我来说相当费力。
对于一个我们打算练习这个重点的 Uni 项目,我的任务是创建至少 2 个 classes: 一个 class 应该用于航空公司客户,另一个 class 应该包含注册购买的方法。
我有一个主文件,一个 Persona(人)class,和一个 RegistroCompra(购买注册)class。 Person 应该具有以下所有属性,我将它们作为私有变量处理,以便 Person 的每个实例都可以获得它们自己的一个。 (要求的属性是个人数据、票号、座位号等)
public class Persona {
private String nombrePasajero;
private String apellidoPasajero;
private String generoPasajero;
private String pasaportePasajero;
private String numTiquetePasajero;
private String numVueloPasajero;
private String destinoPasajero;
private String asientoString;
private int precioBoleto;
private int edadPasajero;
private int numAsientoPasajero;
//Constructor
public Persona(String nombre, String apellido, String genero, int edad, String pasaporte) {
nombrePasajero = nombre;
apellidoPasajero = apellido;
generoPasajero = genero;
pasaportePasajero = pasaporte;
edadPasajero = edad;
}
public void setDestino() {
destinoPasajero = RegistroCompra.obtenerDestino();
}
还有我的RegistroCompra class,它的意思是设置与个人信息无关的数据,而是与目的地、航班号等信息相关的数据。 RegistroCompra 中的所有数据集都必须由 Persona 获取,因为只有 Persona 会在 main 中打印以验证所有信息。
public class RegistroCompra {
private String destino;
public void seleccionarDestino() {
Scanner input = new Scanner(System.in);
System.out.println("Por favor digite el destino, las opciones actuales son Nicaragua o Panama\n");
String destino = input.nextLine();
}
public String obtenerDestino() {
return destino;
}
}
但是,我在 Persona.setDestino() 方法中遇到错误,显示 "non-static method obtenerDestino cannot be referenced from astatic context"
我不明白为什么会这样。如果我尝试将 RegistroCompra.obtenerDestino() 转换为静态方法,则会出现错误,因为 "destino is a non static variable",但它在 RegistroCompra class 中被定义为 public...
您必须执行以下操作:
public class Persona {
...
//You should have instance of RegistroCompra
RegistroCompra registraCompra = new RegistroCompra();
public void setDestino() {
//Option 1: Explicitly call the method
registraCompra.seleccionarDestino();
destinoPasajero = registraCompra.obtenerDestino();
}
}
public class RegistroCompra {
private String destino;
public RegistroCompra(){
//Option 2 : Call the method in constructor
registraCompra();
}
public void seleccionarDestino() {
...
//Set the input to the class level variable destino
this.destino = input.nextLine();
}
public String obtenerDestino() {
return this.destino;
}
}
您在没有实例的情况下调用实例方法。在能够调用实例方法之前,您必须实例化 class(从 class 创建一个实例)。
您可以这样做,使 destino
变量和 obtenerDestino()
方法静态化。检查以下对 RegistroCompra
class:
public class RegistroCompra {
private static String destino;
public void seleccionarDestino() {
Scanner input = new Scanner(System.in);
System.out.println("Por favor digite el destino, las opciones actuales son Nicaragua o Panama\n");
String destino = input.nextLine();
}
public static String obtenerDestino() {
return destino;
}
}