【问题标题】:Non mandatory method implementation of an interface in Java [duplicate]Java中接口的非强制性方法实现[重复]
【发布时间】:2020-05-07 03:51:39
【问题描述】:

在 Java 安卓中:

说,有一个界面:

interface RC
{
  void Run();
  void Turn(Boolean leftRight);
  void Reverse();
  void Stop();
  void Launch();
}

如何在继承类中将Launch()方法标记为非强制实现?

明白了

class A implements RC{
  //class A methods... + only 4 from RC
  public void Run();
  public void Turn(Boolean leftRight);
  public void Reverse();
  public void Stop();
  // is not existed Launch
}

【问题讨论】:

  • 你可以把那个方法抽象化
  • 我将支持@Nobody 的评论 - 接受的答案甚至不会编译。 ashok 的回答是有效的,但通常是不可取的(如果其他类实现 RC 但也从另一个类继承怎么办?)。 @没人的答案是正确的选择。编辑添加:在接受答案之前发表的评论编辑为abstract 类,但@NObody 的答案仍然与问题匹配。

标签: java android


【解决方案1】:

对于 java 8+,您可以将方法标记为默认值并将其实现提供为空主体。虽然在大多数情况下你会想要分离接口,但有时它确实很有用。例如:

interface A {
    void first();
    default void second(){
       //throw new UnsupportedOperationException(); or do some default logic
    }
}

在你的实现类中你只需要实现第一个方法

【讨论】:

    【解决方案2】:

    在java接口中,必须实现所有方法。可以使用抽象类。

    abstract class RC
     {
      void Run(){}
      void Turn(Boolean leftRight){}
      void Reverse(){}
      void Stop(){}
      void Launch(){}
    

    }

    class A extends RC{
    
     //class A methods... + only 4 from RC
     public void Run(){}
     public void Turn(Boolean leftRight){}
    public void Reverse(){}
    public void Stop(){}
     // is not existed Launch
    }
    

    【讨论】:

      【解决方案3】:

      你可以试试这个:

      界面:

      interface RC
      {
        void Run();
        void Turn(Boolean leftRight);
        void Reverse();
        void Stop();
        void Launch();
      }
      

      你正在实现接口的类:

      abstract class A implements RC{
        //class A methods... + only 4 from RC
        public void Run();
        public void Turn(Boolean leftRight);
        public void Reverse();
        public void Stop();
        // is not existed Launch
      }
      

      【讨论】:

      • 嗨。你能指定你的例子的java版本吗?据我所知,它不会像在 java 8+ 上那样工作(另外,如果接口的所有方法默认都是抽象的,请解释为什么接口方法应该声明为抽象)
      • 不,这样不行。
      猜你喜欢
      • 1970-01-01
      • 2019-01-08
      • 1970-01-01
      • 2020-04-27
      • 2012-08-13
      • 1970-01-01
      • 2012-03-29
      • 2012-11-27
      • 1970-01-01
      相关资源
      最近更新 更多