Не находит точку входа в программу

133
26 мая 2019, 13:40

Выполняю тестовые задания в книге по Java и не могу разобраться: если интерфейс объявлен в одном файле с классом компилятор пытается найти метод у интерфейса.

interface Aquatic 
{
  public default int getNumberOfGills(int input) {
  return input;
  }
}
public class ClownFish implements Aquatic {
  public String getNumberOfGills() { return "4"; }
  public int getNumberOfGills(int input) { return 6; }
  public static void main(String[] argv) {
   System.out.println(new ClownFish().getNumberOfGills(-1));
  }
}

Следовательно, я получаю ошибку:

error: can't find main(String[]) method in class: Aquatic

Если я пытаюсь вынести интерфейс в отдельный файл Aquatic.java компилятор его не видит:

test.java:1: error: cannot find symbol
public class ClownFish implements Aquatic {
                                  ^
  symbol: class Aquatic

Что не так?

Answer 1

У меня все работает:
, хотя сам NetBeans предлагает перенести interface в допустимую папку или файл. Также работает и с абстрактным классом.

abstract class Aquatic 
{
  public int getNumberOfGills(int input) {
  return input;
  }
}
public class ClownFish extends  Aquatic {
  public String getNumberOfGills() { return "4"; }
  public int getNumberOfGills(int input) { return 6; }
  public static void main(String[] argv) {
   System.out.println(new ClownFish().getNumberOfGills(-1));
  }
}
Answer 2

Вы использовали default метод в интерфейсе, они, вместе с лямбдами, появились в Java 8, раз у вас не компилируется, значит у вас версия jdk <8. Только что скопировал ваш код в ClownFish.java и запустил

javac ClownFish.java
java ClownFish
> 6
java -version
> openjdk version "11" 2018-09-25
READ ALSO
Появляются сильные ссылки на объект в лямбде или слушателе, после чего GC не может очистить память

Появляются сильные ссылки на объект в лямбде или слушателе, после чего GC не может очистить память

Есть игра на JavaFXИ я уже несколько дней пытаюсь бороться с это проблемой

107
Как найти самое длинное и самое короткое предложение в строке

Как найти самое длинное и самое короткое предложение в строке

Как найти самое длинное и самое короткое предложение в строке s без использования split(), ArrayList и так далееВ данном коде я уже нашел количество...

228