我是 Java 新手,老实说,它的 OOP 重点目前对我来说相当繁重。
对于一个旨在实践这一重点的 Uni 项目,我的任务是创建至少 2 个类: 一个类应该面向航空公司客户,另一个类应该包含注册其购买的方法。
我有一个主文件、一个 Persona(人员)类和一个 RegistroCompra(购买注册)类。 Person 应该具有以下所有属性,我将这些属性作为私有(private)变量处理,以便 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类,它的目的是设置与个人信息无关的数据,而是与目的地、航类号等信息相关的数据。 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() 方法中收到错误,提示“无法从静态上下文中引用非静态方法 obtenerDestino”
我不明白为什么会这样。如果我尝试将 RegistroCompra.obtenerDestino() 转换为静态方法,则会收到错误,因为“destino 是非静态变量”,但它在 RegistroCompra 类中被定义为公共(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;
}
}
关于java - Java中无法调用另一个类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60180641/