boolean isAbleToFly()
выглядит хорошо как объявление интерфейса, но вы, вероятно, не хотите объявлять реализацию в интерфейсе (return true
). Если вы используете Java 8 или выше, вы можете объявить реализацию по умолчанию для вашего метода (подробнее см. Ниже).
Вам потребуется создать класс, расширяющий этот интерфейс, и только затем добавить реализацию. Если вам нужна структура, в которой вы определяете контракт для определенных методов при реализации других, взгляните на абстрактные классы. https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
interface Launchable {
void launch();
boolean isAbleToFly();
void land();
}
class LandThing implements Launchable {
public void launch() {
System.out.println("¯\\_(ツ)_/¯");
}
public boolean isAbleToFly() {
return false;
}
public void land() {
System.out.println("¯\\_(ツ)_/¯");
}
}
class Playground {
public static void main(String[ ] args) {
Launchable landThing = new LandThing();
System.out.println("Can landThing fly?: " + landThing.isAbleToFly());
landThing.land();
}
}
Пример запуска здесь
==== Редактировать методы по умолчанию в интерфейсах ===
Что касается Java 8 или выше, теперь вы можете объявить методы по умолчанию для ваших интерфейсов, как в следующем примере . Согласно документации, вариант использования - обеспечить обратную совместимость со старым кодом при развитии интерфейса, поэтому он может не соответствовать тому, что вы ищете.
interface Launchable {
void launch();
default boolean isAbleToFly() {
return true;
};
void land();
}
class FlyThing implements Launchable {
public void launch() {
System.out.println("¯\\_(ツ)_/¯");
}
// Notice that we will be using the default implementation of isAbleToFly here
public void land() {
System.out.println("¯\\_(ツ)_/¯");
}
}
class LandThing implements Launchable {
public void launch() {
System.out.println("¯\\_(ツ)_/¯");
}
public boolean isAbleToFly() {
return false;
}
public void land() {
System.out.println("¯\\_(ツ)_/¯");
}
}
class Playground {
public static void main(String[ ] args) {
Launchable landThing = new LandThing();
Launchable flyThing = new FlyThing();
System.out.println("Can landThing fly?: " + landThing.isAbleToFly());
System.out.println("Can flyThing fly?: " + flyThing.isAbleToFly());
landThing.land();
}
}