繁体   English   中英

编写一个方法 isAbleToFly(),它不接受任何参数并返回 true 或 false?

[英]Writing a method isAbleToFly(), which takes no argument and returns true or false?

我正在编写一个名为 Launchable 的界面。 Launchable 接口指定了三个方法:launch(),不带参数,不返回值;isAbleToFly(),不带参数,返回 true 或 false;land(),不带参数,不返回值。

这是我为 isAbleToFly 所做的尝试:

 public interface Launchable
{
 public void launch();

 public boolean isAbleToFly();
 return true

 public void land();

 }

但它说类型的非法开始返回true?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM