Выполняю тестовые задания в книге по 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
Что не так?
У меня все работает:
, хотя сам 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));
}
}
Вы использовали default метод в интерфейсе, они, вместе с лямбдами, появились в Java 8, раз у вас не компилируется, значит у вас версия jdk <8. Только что скопировал ваш код в ClownFish.java и запустил
javac ClownFish.java
java ClownFish
> 6
java -version
> openjdk version "11" 2018-09-25
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть игра на JavaFXИ я уже несколько дней пытаюсь бороться с это проблемой
Как найти самое длинное и самое короткое предложение в строке s без использования split(), ArrayList и так далееВ данном коде я уже нашел количество...