У меня есть два класса, каждый из которых имеет один toString(). В третьем классе (Main), я хочу напечатать информацию из toString(), вызвав только одно из toString(). Некоторая помощь была бы фантастической!
Главный:
public static void print(Class1[] cls1, int index){
System.out.println(cls1[index].toString());
}
Class1:
@Override
public String toString() {
return getMethod() + getMethod2();
}
Class2:
@Override
public String toString() {
return getMethod3() + getMethod4();
}
Одна из альтернатив, о которых я думал, заключалась в добавлении Class2.toString() в Class1 (я не мог заставить его работать):
@Override
public String toString() {
return getMethod() + getMethod2() + Class2.toString();
}
Еще одна идея, которую я имел, - просто добавить геттеры прямо в toString в Class1 вместо использования toString (это тоже не сработало):
@Override
public String toString() {
return getMethod() + getMethod2() + Class2.getMethod3() + Class2.getMethod4();
}
Вы не можете ссылаться на toString
как это, потому что это не статический метод
Class2.toString();
Вам нужен объект класса Class2
, чтобы использовать toString
как:
class2Obj.toString();
Также это работает для Class2.getMethod3()
и Class2.getMethod4
class2Obj.getMethod3();
Вы сначала решили добавить класс2 в строку, но не работали, потому что строка не является статическим методом, поэтому вы должны называть ее объектом. Я действительно не понимаю, почему вы не можете просто позвонить каждому по отдельности, но большинство ваших проблем связаны с попыткой сделать статические вызовы методам string. Я не был уверен в вашем вопросе, но если класс 2 расширяет класс 1, есть простое исправление: добавьте super.toString()
в качестве первой строки класса 2 в строковый метод.
Я действительно не могу заставить его работать. Я создал объекты классов, но до сих пор нет прогресса. Возможно, это связано с тем, как я создаю свои объекты? У меня должны быть класс1-объекты в массиве и class2-objects в arrayList.
public static void main(String[] args) {
Main main = new Main();
Class1 []class1 = new Class1[2];
ArrayList<Class2> class2List = new ArrayList<Class2>();
for(int i=0; i<class1.length; i++){
class1[i] = getClass1Obj();
class2List.add(getClass2Obj());
}
for(int i=0; i<class1.length; i++){
printClass1(class1, i);
}
}
public static void printClass1(Class1[] class1s, int index){
if (index == 0 || index == 1) {
System.out.println(class1s[index].toString());
}
}
public Class1{
@Override
public String toString(){
return yourMethod();
}
}
public Class2 {
private Class1 class1;
//getters and setters
@Overrie
public String toString(){
return class1.toString() + yourMethodFromClass2();
}
}
public class MainClass{
public static void main(String[] args){
Class1 class1 = new Class1();
Class2 class2 = new Class2();
class2.setClass1(class1);
class2.toString();
}
}
Теперь вы можете просто поместить class2.toString в какой-то метод и вызвать его в своем главном :) также в toString или sth.