Написание метода isAbleToFly (), который не принимает аргументов и возвращает true или false? - PullRequest
0 голосов
/ 24 января 2020

Я пишу интерфейс под названием Launchable. Интерфейс Launchable определяет три метода: launch (), который не принимает аргументов и не возвращает значений, isAbleToFly (), который не принимает аргументов и возвращает true или false, и land (), который не принимает аргументов и не возвращает значений.

это то, что я пытался использовать для isAbleToFly:

 public interface Launchable
{
 public void launch();

 public boolean isAbleToFly();
 return true

 public void land();

 }

, но там указано, что недопустимое начало типа возвращает true?

1 Ответ

1 голос
/ 24 января 2020

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();
        }
    }
...