Переопределение toString Java

Всем здравствуйте! Кто нибудь может мне помочь с одним моментом, я пишу программу, которая принимает в список ArrayList объекты разных классов, а именно, от trial_exam, trial_test и trial_final_exam , которые наследуются от супер класса Trial, и, для того, чтобы вывести эти объекты с переменными, необходимо переопределить метод toString, но, когда я переопределяю этот метод в супер классе, я не могу обращаться к переменным наследников, так вот, кто нибудь может мне подсказать, как переопределить метод в супер классе, чтобы можно было брать переменные наследников?)

Класс Main:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main{

    public static void main(String[] args) throws IOException {
        String number = null;
        ArrayList<Trial> TrialArrayList = new ArrayList<Trial>();
        do{
        System.out.println("Добро пожаловать! Выберите интересующий вас вариант");
        System.out.println("1. Добавить новый элемент");
        System.out.println("2. Удалить элемент по индексу");
        System.out.println("3. Вывод всех элементов в консоль");
        System.out.println("4. Сравнение двух элементов");
        System.out.println("5. Выход");
        System.out.print("> ");

        Scanner scaner = new Scanner(System.in);
        do {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            number = reader.readLine();
        } while (!isNumeric(number) || !prov_na_diap(number));
        //System.out.println(num_int);


            switch (number) {
                case "1":
                    System.out.println("Ок, давайте добавим новый элемент, только, нажмите: ");
                    System.out.println("1 - если, вы хотите добавить элемент, типа \"Экзамен\"");
                    System.out.println("2 - если, вы хотите добавить элемент, типа \"Тест\"");
                    System.out.println("3 - если, вы хотите добавить элемент, типа \"Финальный экзамен\"");

                    do {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                        number = reader.readLine();
                    } while (!isNumeric(number) || !prov_na_diapazon(number)); //Посмотреть позже

                    String name = null;
                    String score_test = null;
                    String name_stud = null;
                    int numer = 0;
                    int score = 0;
                    int year = 0;
                    if (number.equals("1")) {
                        System.out.print("Введите название билета: ");
                        name = scaner.nextLine();
                        System.out.print("Введите оценку: ");
                        score = scaner.nextInt();
                        while (true) {
                            System.out.print("Введите номер билета: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                numer = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        trial_exam exam = new trial_exam(name, numer, score);
                        TrialArrayList.add(exam);
                        System.out.println(exam.name_of_tick + " " + exam.num_of_tick + " " + exam.score);
                    }
                    else if (number.equals("2")){
                        System.out.print("Введите название теста: ");
                        name = scaner.nextLine();
                        System.out.print("Введите оценку(зачёт\\незачёт): ");
                        score_test = scaner.nextLine();
                        while (true) {
                            System.out.print("Введите номер варианта: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                numer = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        trial_test test = new trial_test(name, numer, score_test);
                        TrialArrayList.add(test);
                        System.out.println(test.test_name + " " + test.num_of_var + " " + test.test);
                    }
                    else if (number.equals("3")){
                        System.out.print("Введите имя научного руководителя: ");
                        name = scaner.nextLine();
                        System.out.print("Введите имя студента: ");
                        name_stud = scaner.nextLine();
                        while (true) {
                            System.out.print("Введите год выпуска: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                year = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        while (true) {
                            System.out.print("Введите оценку: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                numer = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        trial_final_exam final_exam = new trial_final_exam(name, name_stud, year, numer);
                        TrialArrayList.add(final_exam);
                        System.out.println(final_exam.title_of_the_rep + " " + final_exam.students_name + " "
                                + final_exam.year_of_issue + " " + final_exam.score);
                    }
                    break;
                case "2":
                    System.out.println("Ок, давайте удалим элемент, только, нажмите: ");
                    System.out.println("1 - если, вы хотите удалить элемент, типа \"Экзамен\"");
                    System.out.println("2 - если, вы хотите удалить элемент, типа \"Тест\"");
                    System.out.println("3 - если, вы хотите удалить элемент, типа \"Финальный экзамен\"");

                    do {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                        number = reader.readLine();
                    } while (!isNumeric(number) || !prov_na_diapazon(number));

                    if(number.equals("1")){
                        if(TrialArrayList.size() == 0) {
                            System.out.println("Ваш список пуст, прежде всего, добавте в него элементы");
                            break;
                        }
                        else{
                            System.out.println("Ваш список элементов в списке: ");
                                System.out.println(TrialArrayList.toString());


                        }

                    }

                    break;
                case "3":
                    break;
                case "4":
                    break;
                case "5":
                    System.out.println("Спасибо за работу, до свидания");
                    break;
            }
        }while (Integer.parseInt(number) != 5);

    }

    public static boolean isNumeric(String str){
        try {
            Double.parseDouble(str);
            return true;
        } catch (NumberFormatException e) {
            System.out.println("Некорректный ввод, пожалуйста, повторите попытку");
            return false;
        }
    }
    public static boolean prov_na_diap(String str){
        int str_to_int = Integer.parseInt(str);
        if ((str_to_int >= 1 & str_to_int <= 5)) return true;
        else {
            System.out.println("Некорректный ввод, пожалуйста, повторите попытку");
            return false;
        }
    }
    public static boolean prov_na_diapazon(String str){
        int str_to_int = Integer.parseInt(str);
        if ((str_to_int >= 1 & str_to_int <= 3)) return true;
        else {
            System.out.println("Некорректный ввод, пожалуйста, повторите попытку");
            return false;
        }
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

Класс Trial:


import java.security.PublicKey;
import java.util.Objects;

public class Trial {
    String test;
    int score;

    public String toString(String tNName, int num, String resTest){
        return "Тест по предмету: " + tNName + ", номер варианта: " + num + ", оценка: " + resTest;
    }

    public String toString(String nameTick, int numTic, int resExam){
        return "Название билета " + nameTick + ", номер билета: " + numTic + ", оценка: " + resExam;
    }

    public String toString(String nameDio, String nameStud, int yearOfIs, int resExam){
        return "Название диплома: " + nameDio + ", имя студента: " + nameStud + ", год выпуска: " + yearOfIs + ", ооценка: " + resExam;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Trial trial = (Trial) o;
        return score == trial.score && Objects.equals(test, trial.test);
    }

    @Override
    public int hashCode() {
        return Objects.hash(test, score);
    }

    @Override
    public String toString() {
        return
    }
}

Класс trial_exam:


public class trial_exam extends Trial {
    String name_of_tick;
    int num_of_tick;


    trial_exam(String name_of_tick, int num_of_tick, int score){
        this.name_of_tick = name_of_tick;
        this.num_of_tick = num_of_tick;
        this.score = score;
    }


    public  String toString() {
        return "trial_exam{" +
                "name_of_tick='" + name_of_tick + '\'' +
                ", num_of_tick=" + num_of_tick +
                '}';
    }
}

Класс trial_test:


public class trial_test extends Trial{
    String test_name;
    int num_of_var;

    trial_test(String test_name, int num_of_var, String test){
        this.test_name = test_name;
        this.num_of_var = num_of_var;
        this.test = test;
    }

    @Override
    public String toString() {
        return "trial_test{" +
                "test_name='" + test_name + '\'' +
                ", num_of_var=" + num_of_var +
                '}';
    }
}

Класс trial_final_exam:


public class trial_final_exam extends Trial {
    String title_of_the_rep;
    String students_name;
    int year_of_issue;

    trial_final_exam(String title_of_the_rep, String students_name,
                     int year_of_issue, int score){
        this.title_of_the_rep = title_of_the_rep;
        this.students_name = students_name;
        this.year_of_issue = year_of_issue;
        this.score = score;
    }

    @Override
    public String toString() {
        return "trial_final_exam{" +
                "title_of_the_rep='" + title_of_the_rep + '\'' +
                ", students_name='" + students_name + '\'' +
                ", year_of_issue=" + year_of_issue +
                '}';
    }
}

Ответы (1 шт):

Автор решения: K_V_G

Ок, что ж, я разобрался, необходимо было переопределить метод toString в каждом классе наследнике и затем уже использовать либо итератор, либо метод toString. Если кому-то нужно, опять же:

Класс Main:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

public class Main{

    public static void main(String[] args) throws IOException {
        String number = null;
        ArrayList<Trial> TrialArrayList = new ArrayList<Trial>();
        do{
        System.out.println("Добро пожаловать! Выберите интересующий вас вариант");
        System.out.println("1. Добавить новый элемент");
        System.out.println("2. Удалить элемент по индексу");
        System.out.println("3. Вывод всех элементов в консоль");
        System.out.println("4. Сравнение двух элементов");
        System.out.println("5. Выход");
        System.out.print("> ");

        Scanner scaner = new Scanner(System.in);
        do {
            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
            number = reader.readLine();
        } while (!isNumeric(number) || !prov_na_diap(number));
        //System.out.println(num_int);


            switch (number) {
                case "1":
                    System.out.println("Ок, давайте добавим новый элемент, только, нажмите: ");
                    System.out.println("1 - если, вы хотите добавить элемент, типа \"Экзамен\"");
                    System.out.println("2 - если, вы хотите добавить элемент, типа \"Тест\"");
                    System.out.println("3 - если, вы хотите добавить элемент, типа \"Финальный экзамен\"");

                    do {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                        number = reader.readLine();
                    } while (!isNumeric(number) || !prov_na_diapazon(number)); //Посмотреть позже

                    String name = null;
                    String score_test = null;
                    String name_stud = null;
                    int numer = 0;
                    int score = 0;
                    int year = 0;
                    if (number.equals("1")) {
                        System.out.print("Введите название билета: ");
                        name = scaner.nextLine();
                        System.out.print("Введите оценку: ");
                        score = scaner.nextInt();
                        while (true) {
                            System.out.print("Введите номер билета: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                numer = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        trial_exam exam = new trial_exam(name, numer, score);
                        TrialArrayList.add(exam);
                        System.out.println(exam.name_of_tick + " " + exam.num_of_tick + " " + exam.score);
                    }
                    else if (number.equals("2")){
                        System.out.print("Введите название теста: ");
                        name = scaner.nextLine();
                        System.out.print("Введите оценку(зачёт\\незачёт): ");
                        score_test = scaner.nextLine();
                        while (true) {
                            System.out.print("Введите номер варианта: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                numer = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        trial_test test = new trial_test(name, numer, score_test);
                        TrialArrayList.add(test);
                        System.out.println(test.test_name + " " + test.num_of_var + " " + test.test);
                    }
                    else if (number.equals("3")){
                        System.out.print("Введите имя научного руководителя: ");
                        name = scaner.nextLine();
                        System.out.print("Введите имя студента: ");
                        name_stud = scaner.nextLine();
                        while (true) {
                            System.out.print("Введите год выпуска: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                year = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        while (true) {
                            System.out.print("Введите оценку: ");
                            if (!scaner.hasNextInt()) {
                                System.out.println("Некорректные данные, попробуйте снова!");
                                scaner.nextLine();
                            } else {
                                numer = scaner.nextInt();
                                scaner.nextLine();
                                break;
                            }
                        }
                        trial_final_exam final_exam = new trial_final_exam(name, name_stud, year, numer);
                        TrialArrayList.add(final_exam);
                        System.out.println(final_exam.title_of_the_rep + " " + final_exam.students_name + " "
                                + final_exam.year_of_issue + " " + final_exam.score);
                    }
                    break;
                case "2":
                    System.out.println("Ок, давайте удалим элемент, только, нажмите: ");
                    System.out.println("1 - если, вы хотите удалить элемент, типа \"Экзамен\"");
                    System.out.println("2 - если, вы хотите удалить элемент, типа \"Тест\"");
                    System.out.println("3 - если, вы хотите удалить элемент, типа \"Финальный экзамен\"");

                    do {
                        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
                        number = reader.readLine();
                    } while (!isNumeric(number) || !prov_na_diapazon(number));

                    if(number.equals("1")){
                        if(TrialArrayList.size() == 0) {
                            System.out.println("Ваш список пуст, прежде всего, добавте в него элементы");
                            break;
                        }
                        else{
                            System.out.println("Ваш список элементов в списке: ");
                            Iterator<Trial> trialIterator = TrialArrayList.iterator();
                            while(trialIterator.hasNext()){
                                Trial nextTrial = trialIterator.next();
                                System.out.println("-" + nextTrial);
                            }

                        }

                    }

                    break;
                case "3":
                    break;
                case "4":
                    break;
                case "5":
                    System.out.println("Спасибо за работу, до свидания");
                    break;
            }
        }while (Integer.parseInt(number) != 5);

    }

    public static boolean isNumeric(String str){
        try {
            Double.parseDouble(str);
            return true;
        } catch (NumberFormatException e) {
            System.out.println("Некорректный ввод, пожалуйста, повторите попытку");
            return false;
        }
    }
    public static boolean prov_na_diap(String str){
        int str_to_int = Integer.parseInt(str);
        if ((str_to_int >= 1 & str_to_int <= 5)) return true;
        else {
            System.out.println("Некорректный ввод, пожалуйста, повторите попытку");
            return false;
        }
    }
    public static boolean prov_na_diapazon(String str){
        int str_to_int = Integer.parseInt(str);
        if ((str_to_int >= 1 & str_to_int <= 3)) return true;
        else {
            System.out.println("Некорректный ввод, пожалуйста, повторите попытку");
            return false;
        }
    }

    @Override
    public String toString() {
        return super.toString();
    }
}

Класс Trial:


import java.security.PublicKey;
import java.util.Objects;

public class Trial {
    String test;
    int score;

    public String toString(String tNName, int num, String resTest){
        return "Тест по предмету: " + tNName + ", номер варианта: " + num + ", оценка: " + resTest;
    }

    public String toString(String nameTick, int numTic, int resExam){
        return "Название билета " + nameTick + ", номер билета: " + numTic + ", оценка: " + resExam;
    }

    public String toString(String nameDio, String nameStud, int yearOfIs, int resExam){
        return "Название диплома: " + nameDio + ", имя студента: " + nameStud + ", год выпуска: " + yearOfIs + ", ооценка: " + resExam;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Trial trial = (Trial) o;
        return score == trial.score && Objects.equals(test, trial.test);
    }

    @Override
    public int hashCode() {
        return Objects.hash(test, score);
    }

    @Override
    public String toString() {
        return "Trial{" +
                "test='" + test + '\'' +
                ", score=" + score +
                '}';
    }
}

Класс trial_exam:


public class trial_exam extends Trial {
    String name_of_tick;
    int num_of_tick;


    trial_exam(String name_of_tick, int num_of_tick, int score){
        this.name_of_tick = name_of_tick;
        this.num_of_tick = num_of_tick;
        this.score = score;
    }


    public  String toString() {
        return "trial_exam{" +
                "name_of_tick='" + name_of_tick + '\'' +
                ", num_of_tick=" + num_of_tick +
                ", score=" + score +
                '}';
    }
}

Класс trial_test:


public class trial_test extends Trial{
    String test_name;
    int num_of_var;

    trial_test(String test_name, int num_of_var, String test){
        this.test_name = test_name;
        this.num_of_var = num_of_var;
        this.test = test;
    }

    @Override
    public String toString() {
        return "trial_test{" +
                "test_name='" + test_name + '\'' +
                ", num_of_var=" + num_of_var +
                ", test=" + test +
                '}';
    }
}

Класс trial_final_exam:


public class trial_final_exam extends Trial {
    String title_of_the_rep;
    String students_name;
    int year_of_issue;

    trial_final_exam(String title_of_the_rep, String students_name,
                     int year_of_issue, int score){
        this.title_of_the_rep = title_of_the_rep;
        this.students_name = students_name;
        this.year_of_issue = year_of_issue;
        this.score = score;
    }

    @Override
    public String toString() {
        return "trial_final_exam{" +
                "title_of_the_rep='" + title_of_the_rep + '\'' +
                ", students_name='" + students_name + '\'' +
                ", year_of_issue=" + year_of_issue +
                ", score=" + score +
                '}';
    }
}
→ Ссылка