10

議論中に友人の 1 人が、concrete methods would be allowed in java 1.8 in interfacesそのとき質問が頭に浮かんだことを教えてくれました。つまり、許可されている場合、メソッドをどのように区別するのでしょうか。たとえば、
私には 2 つのインターフェイスがAnimal.javaありPet.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
   }

ここに私の混乱があります。オブジェクトanimalを使用してインターフェイスで特定のメソッドを呼び出すにはどうすればよいですかTest

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

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

助言がありますか?または、答えが見つからないため、Java1.8でこれに対する解決策はありますか。

4

1 に答える 1

9

Zoo クラスで eat をオーバーライドしない限り、コンパイル時にエラーが発生します。

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

最新かつ最高の jdk はここにあります。そして、構文は

default void eat(){
  System.out.println("Animal Start eating ....");
}
于 2013-04-12T10:50:23.420 に答える