2012-01-19 2 views
0

У меня есть два класса:Инстанцирование класс, ToString термины

import android.cla; 
public class CW { 

public static void main(String [] args){ 
    System.out.println(new cla()); 
} 
} 

public class Cl { 
    @Override 
    public String toString(){ 
     return "LOL"; 
    } 
} 

В первом классе я звоню объекты toString() метод, который был перекрываться и печать его консоль. Он явно возвращает «LOL»;

У меня есть два вопроса:

  • Можно ли вернуть данные в то время как инстанцировании как это (new cla()) не отменяя объектам toString() метод; и

  • Что такое правильный термин для инстанцировании классов, как это (new cla()), это без объявления, как: Object l = new cla()

Спасибо. Пожалуйста, исправьте меня на правильных условиях.

ответ

3

1 - Нет, это не так. «Конструктор» - это специальный метод для класса, который всегда возвращает экземпляр объекта класса. Вся цель конструктора - вернуть объект. Нет, он ничего не может вернуть.

1a - Причина, по которой System.out.println вызывает метод toString потому, что вы просите его, чтобы распечатать этот объект на экране, а также метод toString является метод, выбранный авторами println (и язык Java в целом) для представления строкового представления объекта.

2 - Этот способ письма на самом деле не называется чем-либо. Это просто выражение, которое вы передаете как «фактический параметр» в метод println. Правда, это выражение, которое создает экземпляр нового объекта, но это ничем не отличается от println("a string"). Вы могли бы назвать это анонимным объектом, если хотите.

2a - (старый ответ, который на самом деле не отвечает на ваш вопрос, но я сохраню его здесь) Это просто называется «используя менее производную ссылку» для класса ». Опасайтесь, вы можете вызывать методы только для типа ссылки, поэтому, если вы добавили дополнительные методы в ваш класс Cl, вы не могли бы назвать их ссылкой Object. Посмотрите на Liskov substitution principle.

† «менее производный» или «супертип» или «суперкласс» или «более общий класс» и т. Д.