Решил я немного поиграться с заданием, посоздавать объекты, позасовывать в ссылки и посмотреть как они себя ведут. Однако стразу же словил такую вот штуку:
public class Solution {
public static void main(String[] args) {
Dog dog = new Dog(); // ошибка - cannot be referenced from a static context
}
public interface CanFly {
public void fly();
}
public interface CanMove {
public void move();
}
public interface CanEat {
public void eat();
}
public class Dog implements CanMove, CanEat{
@Override
public void eat() {
System.out.println("Ем! Гав!");
}
@Override
public void move() {
System.out.println("Бегу! Гав!");
}
}
}
Покопавшись в старых лекциях и интернете выяснил, что нестатические методы вложенных классов нельзя вызывать в статических методах внешнего. Только через объект внешнего класса. В итоге у меня получилась подобная ерунда:
public class Solution {
public static void main(String[] args) {
Solution sol = new Solution();
List list = new ArrayList<>();
list.add(sol.createDog());
}
public Dog createDog(){
return new Dog();
}
public interface CanFly {
public void fly();
}
public interface CanMove {
public void move();
}
public interface CanEat {
public void eat();
}
public class Dog implements CanMove, CanEat{
@Override
public void eat() {
System.out.println("Ем! Гав!");
}
@Override
public void move() {
System.out.println("Бегу! Гав!");
}
}
}
Скажите, это правильный подход? Выглядит как какой-то костыль если честно. Похоже я совсем не улавливаю суть вложенных классов. Почему компилятор запрещает просто по человечески создать объект вложенного класса?