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才对。我猜是因为实现类实现接口的关系。但具体的流程是怎么样的不清楚,希望大神讲解 展开
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才对。我猜是因为实现类实现接口的关系。但具体的流程是怎么样的不清楚,希望大神讲解 展开
4个回答
展开全部
抽象类是不能被实例化的,而接口比抽象类更加抽象,它不能有实现方法的,当接口或者抽象类作为一个参数传入时,会默认去找到子类作为对象参数传入进去;
同时
public interface CompareAble {//接口
public default Apple compare(Apple a1 , Apple a2){
return a1.getSize() > a2.getSize() ? a1 : a2;
}
}
这个没报错有点不现实吧,接口中是不能有具体的实现方法吧,接口中默认方法都是抽象方法,抽象方法是没有方法体的;
关注我主页,欢迎来交流学习;
同时
public interface CompareAble {//接口
public default Apple compare(Apple a1 , Apple a2){
return a1.getSize() > a2.getSize() ? a1 : a2;
}
}
这个没报错有点不现实吧,接口中是不能有具体的实现方法吧,接口中默认方法都是抽象方法,抽象方法是没有方法体的;
关注我主页,欢迎来交流学习;
展开全部
将类当成参数传入方法,其实就是将类的对象传入方法,如果是抽象类,其实就是将抽象类的子类的对象传入方法,如果是接口,其实就是将接口实现类的对象传入方法。
因为抽象类和接口是不能实例化成对象的,所以必须找它们的子类或实现类
详情见:网页链接
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果需要一个接口的引用,就可以传递一个实现了该接口的类(或它的子类)的对象的引用,这是所有面向对象编程语言的共同特性,是语法规定,没什么好说的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这问题我也想知道咋办
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询