2013-10-09 3 views
2

У меня есть запрос о ToString() в Java, когда я создаю метод ToString, меня учили делать, например:использование ToString в Java

public String toString(){ 

    return.... 
    } 

мне интересно, я могу сделать это как нет метода возвращаемого значения, например:

public void toString(){ 

    System.out.println(....); 
    } 
+0

Правильная программа Java редко использует консоль для отображения строк для пользователя. Это только 95% -ное исследование класса ... Почему это было бы полезно? Вы должны скорее называть этот метод «print()» или somethign else. – ppeterka

+0

@ ppeterka, спасибо за ваш ответ, ну, toString() здесь должен напечатать объект с его атрибутами, поэтому мне не нужно вызывать метод в моем классе main() для печати значения, например, без toString(), Я должен сделать object.getName() + object.getAge() + object.getGender() ... что-то вроде этого –

ответ

4

Нет, вы не можете. Вы получаете ошибку времени компиляции. The return type is incompatible, так как он унаследовал от Object#toString()

Вы можете, как

public void toMyString(){ 

} 

Поскольку новый метод экземпляра относится к текущему классу :)

Edit (конкретный сценарий в):

Тип void :

public void printOneMessage(){ 
System.out.println("printed .That's it"); 
} 

Тип return:

public boolean printOneMessageAndLetMeknow(){ 
// some logic weather to print or not 
System.out.println("printed .That's it"); 

return true; 
} 

Еще для return

public MyObjectType setSomeThingToObjectAndGiveMeBack(MyObjectType receiveObj){ 
    receiveObj.setSomeProperty(someVal); 

return receiveObj; //returning modified 
} 

Это просто для примера х.

+0

О, спасибо Суреш, другой вопрос, вообще говоря, я знаю, какая разница между возвращаемым значением метод и метод void, но как мне решить, какой из них использовать в конкретном сценарии? –

+0

Я скоро обновлю свое сообщение с примерами. –

+0

Спасибо за ваш пример, очень ценим, поэтому метод с возвращаемым значением может также иметь функцию для обновления вещей, могу ли я понять это так? –

2

Метод toString() в вашем классе переопределяет метод его родительского класса, поэтому нет, вы не можете изменить тип возвращаемого метода переопределения на то, что не наследуется от исходного типа возврата.

2

String toString() унаследован от класса Object. Определение void toString() приведет к ошибке времени компиляции, поскольку это незаконно переопределить, поскольку соответствие меток методов, но типы возвращаемых данных несовместимы (одинаковые или со-варианты).


Даже если вы не обеспечивают toString() реализацию класса вы можете ссылаться на toString() на своем объекте. Это потому, что каждый класс по умолчанию расширяет Object и наследует базовую реализацию toString() (помимо всего прочего) от него.

При определении toString() метод самостоятельно, вы в основном делает то, что известно в Упс как метод переопределения т.е. обеспечивая собственную реализацию метода, который заменяет тот, который вы унаследовали от любого из ваших родительских классов.

правового метод коррекция требует сигнатуры методы, чтобы соответствовать тому, который вы пытаетесь переопределить, а также предусмотрено, что возвращаемые типы должны быть либо одинаковыми или совместно вариант т.е. вашего типа должен быть отнесен к первоначальной доходности тип.

+0

Привет, Рави, что вы имеете в виду, он унаследован от класса объекта, я обычно использую String toString() в суперклассе, тогда он будет печатать все объекты в методе main() –

+0

@peiwang. Пожалуйста, посмотрите мое обновление , –

+0

Спасибо за помощь Рави! –

0

Вы должны использовать return для любых методов типа int, String и boolean. Если это метод void, вам не нужно использовать return.

Смежные вопросы