Невозможно вызвать метод из другого класса в Java - PullRequest
2 голосов
/ 12 февраля 2020

Я новичок в Java, и, честно говоря, его фокус OOP в настоящий момент весьма обременителен для меня.

Для проекта Uni, где мы должны практиковать этот фокус, я задание создать как минимум 2 класса: один класс должен быть предназначен для клиента авиакомпании, а другой должен содержать методы для регистрации их покупки.

У меня есть основной файл, класс Persona (Person) и RegistroCompra. (Регистрация покупки) класс. Предполагается, что 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, предназначенный для установки данных, относящихся не к личной информации, а к информации пункта назначения, номер рейса и тому подобное. Весь набор данных в RegistroCompra должен быть получен Persona, потому что только Persona будет напечатан в основном для проверки всей информации.

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 ( ) метод, говорящий «на не * stati c метод obtenerDestino нельзя ссылаться из астати c context»

Я не понимаю, почему это происходит. Если я пытаюсь превратить RegistroCompra.obtenerDestino () в метод stati c, я получаю сообщение об ошибке, поскольку «destino - это переменная не stati c», но она определяется как publi c в классе RegistroCompra. .

Ответы [ 3 ]

2 голосов
/ 12 февраля 2020

Вы должны сделать что-то вроде ниже:

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;
    }

}


1 голос
/ 12 февраля 2020

Вы можете сделать это с помощью переменной destino и метода obtenerDestino() stati c. Проверьте следующие изменения класса RegistroCompra:

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;
    }
}
0 голосов
/ 12 февраля 2020

Вы вызываете метод экземпляра без экземпляра. Вы должны создать экземпляр класса (создать экземпляр из этого класса), прежде чем сможете вызывать методы экземпляра.

...