Объявление переменной включает в себя также объявление ее типа данных, поэтому вы, по сути, спрашиваете об объявлении одной и той же переменной дважды.
Вы правы, полагая, что объявление одной переменной дважды невозможно, но это не так происходит в вашем коде. Ваш
private double side;
является элементом данных объекта Square
, то есть свойством квадратов. Он объявлен в блоке определения class
, следовательно, он является элементом данных.
Ваша
double side = a;
- это локальная переменная, определенная в методе, который является конструктором в нашем дело. Синтаксически это законно, так как это , а не член Square
и, следовательно, это не имеет никакого отношения к члену. Теперь, сказав, что я должен упомянуть, что вы допустили ошибку, так как внутри конструктора вы объявили переменную с тем же именем, что и ваш член данных, инициализировали локальную переменную и затем никогда не использовали ее, а в другом методе вы предполагаете что side
инициализируется. Таким образом, вы почти наверняка намеревались инициализировать свой элемент данных в конструкторе, например:
public Square(double a)
{
this.side = a;
}
или даже
public Square(double a)
{
side = a;
}