【问题标题】:concrete methods in interfaces Java1.8 [duplicate]接口Java1.8中的具体方法[重复]
【发布时间】:2013-04-04 20:10:42
【问题描述】:

在一次讨论中,我的一位朋友告诉我concrete methods would be allowed in java 1.8 in interfaces,然后我想到了一个问题,即如果他们被允许,那么我们将如何区分这些方法。例如
我有两个接口Animal.javaPet.java 并且都有相同的具体方法,即eat()

   public interfaces Animal{

        void eat(){
                System.out.println("Animal Start eating ....");
        }
   }

   public interfaces Pet{

        void eat(){
                System.out.println("Pet Start eating ....");
        }
   }

现在我的Zoo.java 实现了这两个并且没有覆盖

    public class Zoo() implements Pet , Animal{ 
             //Now name method is a part of this class
   }

现在这是我的困惑。如何使用 Test 对象在接口 animal 上调用特定方法

public class Demo{
        public static void main(String[] args){

                 Zoo zoo = new Zoo();
                 zoo.eat();    //What would be the output
        }
 }

有什么建议吗?或者在 java1.8 中是否有任何解决方案,因为我无法找到它的答案。

【问题讨论】:

  • 但我没有在这些问题中找到这个答案。如果它是重复的,那么请指导我解决这个问题
  • 这可能也是最重要的,接口中的静态非继承方法stackoverflow.com/q/14646027/106261
  • 你的原始问题在这里得到了回答stackoverflow.com/a/7857884/106261
  • @NimChimpsky 可能是我的错,但我仍然无法找到(1)zoo.eat(); 的输出和(2)如何调用接口特定方法?跨度>
  • @freak yoru 语法错误顺便说一句,我会用 jdk 8 试试,给我 5 分钟

标签: java interface


【解决方案1】:

您会收到编译时错误,除非您在 Zoo 类中覆盖 eat。

java: class defaultMethods.Zoo inherits unrelated defaults for eat() from types Pet and Animal

最新最好的 jdk 是here btw。语法应该是

default void eat(){
  System.out.println("Animal Start eating ....");
}

【讨论】:

  • 太棒了 :) 所以在这种情况下,两种方法(来自动物和宠物)都会更新吗?对吗?
  • 未更新,已覆盖
  • 最后一件事,这意味着如果我们有同名的默认具体方法,那么我们应该覆盖默认方法吗?否则是编译时错误?对吧?
猜你喜欢
  • 2015-07-09
  • 2016-10-26
  • 2016-07-23
  • 2014-01-26
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
相关资源
最近更新 更多