java中,某方法中含有接口做参数,为什么创建一个接口的实现类可以代替该接口作为该方法的参数? 255

publicclassWorker{//工人类publicApplepickApple(CompareAblecomparAble,Applea1,Applea2){re... public class Worker {//工人类
public Apple pickApple(CompareAble comparAble , Apple a1 , Apple a2){
return comparAble.compare(a1 , a2);
}
}
public interface CompareAble {//接口
public default Apple compare(Apple a1 , Apple a2){
return a1.getSize() > a2.getSize() ? a1 : a2;
}
}
public class Compare implements CompareAble {}//实现类
//测试类中用到带有接口做参数的方法
worker.pickApple(new Compare() , apple1 , apple2);
new Compare()不是创建了Compare类的匿名对象吗?但参数应该为接口CompareAble才对。我猜是因为实现类实现接口的关系。但具体的流程是怎么样的不清楚,希望大神讲解
展开
 我来答
卷寄垒0gy
2020-09-04 · 超过30用户采纳过TA的回答
知道答主
回答量:254
采纳率:91%
帮助的人:35.8万
展开全部
抽象类是不能被实例化的,而接口比抽象类更加抽象,它不能有实现方法的,当接口或者抽象类作为一个参数传入时,会默认去找到子类作为对象参数传入进去;
同时
public interface CompareAble {//接口
public default Apple compare(Apple a1 , Apple a2){
return a1.getSize() > a2.getSize() ? a1 : a2;
}
}
这个没报错有点不现实吧,接口中是不能有具体的实现方法吧,接口中默认方法都是抽象方法,抽象方法是没有方法体的;
关注我主页,欢迎来交流学习;
叶落知秋徒伤悲
2020-01-31
知道答主
回答量:3
采纳率:0%
帮助的人:1978
展开全部

将类当成参数传入方法,其实就是将类的对象传入方法,如果是抽象类,其实就是将抽象类的子类的对象传入方法,如果是接口,其实就是将接口实现类的对象传入方法。

因为抽象类和接口是不能实例化成对象的,所以必须找它们的子类或实现类

详情见:网页链接

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
microroom
科技发烧友

2019-12-21 · 智能家居/数码/手机/智能家电产品都懂点
知道大有可为答主
回答量:7118
采纳率:83%
帮助的人:1616万
展开全部
如果需要一个接口的引用,就可以传递一个实现了该接口的类(或它的子类)的对象的引用,这是所有面向对象编程语言的共同特性,是语法规定,没什么好说的。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
景晔晔4k
2019-12-06 · TA获得超过293个赞
知道答主
回答量:2895
采纳率:1%
帮助的人:189万
展开全部
这问题我也想知道咋办
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式