Переопределение 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 шт):
Ок, что ж, я разобрался, необходимо было переопределить метод 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 +
'}';
}
}