从结果我们可以看出,同时有父类和接口都有同一个方法的实现时,优先调用的是父类的实现,而不是接口中的默认实现。
再定义一个Dog类,实现IEat和IWalk接口,此时则必须要实现walk(),eat()方法。
首先定义两个接口:IEat,IWalk
}
}
}
}
voidwalk();
}
voideat();
}
再次运行Test类,运行结果为:
}
定义一个Test类,运行一下,看看结果
}
总结
接下来可以将中的IWalk接口定义修改一下:
Systeout.println('dogeat!');
}
}
在JDK8中,可以在接口的方法声明前加上default关键字,这样就可以给walk()方法添加具体的实现,此种写法称之为默认方法实现。
}
标签:JDK8,eat,IWalk,dog,接口,walk,方法,public
Dogdog=newDog();
}
JDK8之前的写法:
我们可以看到在调用dowalk()方法时,打印出的是IWalk接口中的默认方法实现。
此时的运行结果为:
Systeout.println('dogeat!');
此时,再次运行Test类,运行结果为:
}
}
那么问题来了,如果Dog类继承自一个Animal的父类,Animal类也实现了IWalk方法,并且已经有了方法的实现,那此时会出现什么情况呢?
以上是JDK8之前的版本的写法。
Systeout.println('dogeat!');
}
}
dowalk();
接口的默认方法除了可以声明为default之外,还可以声明为static,此时,调用默认方法时,则需要用类名.方法名来调用,和调用静态方法的方式是一样的。
doeat();
接下来我们将Dog类中的walk()方法实现删除,只保留eat()方法的实现:
下面我们来具体看一下:
文章为作者独立观点,不代表股票交易接口观点