==
如题,Android或java中,一个接口的对象,它的实例是一个类,这个类实现了该接口,比如:IUserModel iuser = new UserModel; 这样写是不是就是将UserModel中的接口赋值给iuser,然后通过iuser调用其中的方法,而方法的实现是在UserModel中?
首先,澄清下1楼的说法,这并不是所谓的安卓MVP模式的写法,而是JAVA语法的特性(多态),看来学Android的人JAVA都不怎么好啊,大家好好巩固下JAVA基础吧。 然后,这种写法,主要是为了对外解耦,规范外部调用,让调用者不用关心我的实现,而我自己也可以有多种实现方式。######回复 @菜鸟早起 : 谢谢指导,确实是多态,很久没回顾JAVA了,概念有点混淆######你确定这是继承,而不是多态?######楼主说的对。这是MVP模式里面的一种用法,你可以去看看######就是最近在看MVP不是很肯定我的想法,上这来请教的。谢谢!######楼主没说mvp吧,而且这个和mvp没有关系######楼主的问题本身有问题,应该改成:“一个变量或字段是接口类型的,它的值是一个类的实例,这个类实现了该接口,比如:IUserModel iuser = new UserModel();”,实例跟对象指的是同一个东西,类是创建对象的模板,对象是类的实例,所以创建对象也叫实例化。 所以不是“将UserModel中的接口赋值给iuser”而是将UserModel的实例赋值给iuser。 在Java8引入接口默认方法之前,接口中的方法都是没有实现的,说“方法的实现是在UserModel中”没有问题,但在Java8中就不一定了。######说完了楼主问题中的问题,再来回答一下楼主的问题:“为什么能这样写?”,因为Java作为一个面向对象的语言遵循了“里氏替换原则”,即一个对象可以赋值给它所继承的类或所实现的接口的变量。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。