java - Java中无法调用另一个类的方法

标签 java class methods static non-static

我是 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/

相关文章:

methods - "Method [show] does not exist"是什么意思?

java - 当我有并非所有实现者都支持的操作时,设计界面的正确方法是什么?

c# - 为什么在使用 java 和 protobuf-net 的 Protocol Buffer 进行序列化时 byte[] 不同?

java - 如何每出现 x 次就重复一个符号

java - wait/notify 和 Condition 如何管理线程

java - 如何添加类的匿名实例作为 ActionListener

swift - 在 prepare segue 中为类属性添加值

java - 子类调用父类(super class)的方法

javascript - jQuery: .click() 和 .on ("click"之间的区别)

JPanel 上的 Java mouseListener 不起作用