Почему я должен помещать main() в выделенный класс?
У меня нет опыта Java и есть фон C.
Я хотел бы создать новый тип данных, например абстрактный тип данных. В C это будет сделано путем создания структуры для нового типа данных; Я понимаю, что в Java вы создаете класс для этого нового типа данных, а затем начинаете создавать объекты для этого класса.
Я написал два разных способа, и они оба работают. Но я не понимаю недостатков второго пути.
-
Здесь я создаю класс для типа данных, создаю его экземпляр и выполняю операции. Я нашел, что это дизайн, используемый в учебных пособиях в Интернете.
public class DesignOne {
public static void main(String[] args) {
MyDataType obj = new MyDataType(3,4);
System.out.println(obj.sum());
}
}
class MyDataType {
int i;
int j;
MyDataType(int i, int j) {
this.i = i;
this.j = j;
}
int sum() {
return this.i + this.j;
}
}
-
Здесь я создаю экземпляр класса в том же классе, где у меня есть моя функция драйвера. Операции типа sum
также определяются как члены класса. В принципе, есть только один класс.
public class DesignTwo {
int i;
int j;
DesignTwo(int i, int j) {
this.i = i;
this.j = j;
}
int sum() {
return this.i + this.j;
}
public static void main(String[] args) {
DesignTwo obj = new DesignTwo(3,4);
System.out.println("sum == "+obj.sum());
}
}
Каковы недостатки DesignTwo, и почему предпочтительнее DesignOne?
Ответы
Ответ 1
Он по существу сводится к Abstraction. Вы должны попытаться дать каждому классу одну роль. Здесь у вас есть две роли, которые необходимо заполнить:
- Загрузите объект и покажите его
- Представить объект
Поэтому вы должны использовать два класса. Преимущество становится более очевидным после того, как вы начнете хотеть использовать и отображать более одного типа вещей в своей программе.
Ответ 2
Там нет неотъемлемой разницы между этими двумя (хотя в общем случае нечистые публичные поля обычно обескуражены). Единственное различие заключается в том, где вы помещаете основной метод, который концептуально не относится к какому-либо определенному классу. В более крупных программах он обычно живет в отдельном классе запуска только потому, что не имеет смысла привязывать его к какому-либо произвольному классу, но это в основном не имеет отношения к моделированию данных.