Android 一个接口对象,它的实例是一个类,这个类实现了该接口,请问为什么能这样写?
如题,Android或java中,一个接口的对象,它的实例是一个类,这个类实现了该接口,比如:IUserModel iuser = new UserModel;
这样写是不是就是将UserModel中的接口赋值给iuser,然后通过iuser调用其中的方法,而方法的实现是在UserModel中?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
说完了楼主问题中的问题,再来回答一下楼主的问题:“为什么能这样写?”,因为Java作为一个面向对象的语言遵循了“里氏替换原则”,即一个对象可以赋值给它所继承的类或所实现的接口的变量。
楼主的问题本身有问题,应该改成:“一个变量或字段是接口类型的,它的值是一个类的实例,这个类实现了该接口,比如:IUserModel iuser = new UserModel();”,实例跟对象指的是同一个东西,类是创建对象的模板,对象是类的实例,所以创建对象也叫实例化。
所以不是“将UserModel中的接口赋值给iuser”而是将UserModel的实例赋值给iuser。
在Java8引入接口默认方法之前,接口中的方法都是没有实现的,说“方法的实现是在UserModel中”没有问题,但在Java8中就不一定了。
楼主没说mvp吧,而且这个和mvp没有关系
就是最近在看MVP不是很肯定我的想法,上这来请教的。谢谢!
楼主说的对。这是MVP模式里面的一种用法,你可以去看看
你确定这是继承,而不是多态?
回复
谢谢指导,确实是多态,很久没回顾JAVA了,概念有点混淆
首先,澄清下1楼的说法,这并不是所谓的安卓MVP模式的写法,而是JAVA语法的特性(多态),看来学Android的人JAVA都不怎么好啊,大家好好巩固下JAVA基础吧。
然后,这种写法,主要是为了对外解耦,规范外部调用,让调用者不用关心我的实现,而我自己也可以有多种实现方式。