2012-04-12 3 views
0

я не понимаю, почему этоЗачем нужно писать переменную типа, которая получает объект пользовательского класса?

, например:

class Test 
{ 
    public void someMethod() 
    { 



    } 

} 

, а затем

Test test = new Test(); 

почему neccesary писать тип переменной, так что если вы видите, что переменная правопреемников этот пользовательский класс, я думаю, что это переполнение).

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

ответ

3

Вы объявляя тип переменной (ссылки), в отличие к типу объекта.

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

Лучший пример был бы:

Animal animal = new Dog(); 

, в котором ваш код клиента только знает, что он имеет дело с животным. то есть он может (скажем) вызвать метод .eat(), но он не будет знать, что Dog поедает по-другому с Fish.

Обратите внимание, что некоторые языки (например, Scala) будут выполнять тип вывода. То есть вам не нужно объявлять тип переменной, но компилятор определит, какой тип должен быть из вашего последующего использования переменной. Полученный код все еще статически типизирован, но компилятор делает больше работы для вас.

+0

+1, это правда, но я думаю, что в 'auto' ключевое слово, как в C++ и' var' в C# будет хорошо в 'Java'. –

+0

Если вы посмотрите на Scala, вы увидите, что он предоставляет такое средство. например val animal = new Dog –

+0

благодарит за конструктивный ответ –

1

Проблема заключается в объявлении переменной и создании экземпляра переменной. Первая Test объявляет переменную. Вы можете сделать это без создания экземпляра, выполнив:

Test test; 

в new Test() Второй Test вызывает конструктор переменной. В этом случае, поскольку вы не создали конструктор, вы используете конструктор по умолчанию Object. Это может быть сделано с ранее определенной переменной, как в:

Test test; 
test = new Test(); 

Также вы можете иметь несколько конструкторов, которые принимают разные параметры, а затем вы должны указать, какие вы хотите использовать.

public class Test { 

    public Test(int i) { 
    } 

    public Test() { 
    } 
} 

Затем вы можете сделать

Test test = new Test(); 
Test test2 = new Test(2); 
+0

благодарит за конструктивный ответ –

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