Я получаю ошибку:
aTyp0eName.java:18: incompatible types
found: void
required: int
df.i = t.increment();
df.i является int и t.increment [вина?]. Я предполагаю, что это потому, что increment () void?
Точно, ваше предположение верно.
Это сообщение об ошибке объясняется построчно:
aTyp0eName.java:18: incompatible types
Вы пытаетесь присвоить "void" int в строке 18.
df.i = t.increment();
Вот где ошибка.
found: void
Вы объявляете тип возвращаемого значения в методе «подпись».
Подпись метода:
<access modifiers> <return type> <method name> (<parameters> )
static void increment ()
Таким образом, тип возвращаемого значения void.
Следующая строка:
required: int
df.i - это int, как вы ранее заявили.
Итак, в значительной степени вы уже ответили на свой вопрос.
Хорошим моментом наличия компилятора является то, что он сообщает вам, когда что-то не так.
Плохая вещь (для людей), которую вы должны научиться читать эти сообщения. Они варьируются от языка программирования к другому и даже от компилятора к компилятору.
Это будет исправленная версия:
class StaticTest {
static int i = 47;
}
class Incrementable {
static int increment() {
return ++StaticTest.i;
}
}
class DataOnly {
int i;
double d;
boolean b;
public static void main (String[] args) {
Incrementable t = new Incrementable();
DataOnly df = new DataOnly();
df.i = t.increment();
System.out.println(df.i);
}
}
Могут быть сделаны некоторые другие улучшения, такие как добавление модификаторов доступа к методам и атрибутам, но сейчас я думаю, что это поможет.