无法从 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;
    }
}