java—编写一个方法isabletofly(),它不带参数并且返回true或false?

c86crjj0  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(260)

我正在编写一个名为launchable的接口。launchable接口指定了三个方法:launch(),不带参数也不返回值;isabletofly(),不带参数也不返回true或false;land()不带参数也不返回值。
这就是我为isabletofly所做的尝试:

public interface Launchable
{
 public void launch();

 public boolean isAbleToFly();
 return true

 public void land();

 }

但它说非法启动类型返回真的?

hrirmatl

hrirmatl1#

boolean isAbleToFly() 看起来与接口声明一样好,但是您可能不想在接口中声明实现( return true ). 如果您使用的是Java8或更高版本,那么可以为您的方法声明一个默认实现(下面是更多信息)。
您将需要创建一个扩展该接口的类,然后才添加实现。如果您想要一个在实现其他方法的同时为某些方法定义契约的结构,请看一下抽象类。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();
        }
    }

此处为可运行示例
===编辑关于接口中的默认方法===
对于Java8或更高版本,现在可以为接口声明默认方法,如下例所示。根据文档,用例是在开发接口时为旧代码提供向后兼容性,因此它可能不是您想要的。

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

相关问题