开发者社区> 问答> 正文

Android 一个接口对象,它的实例是一个类,这个类实现了该接口,请问为什么能这样写?:报错

==

如题,Android或java中,一个接口的对象,它的实例是一个类,这个类实现了该接口,比如:IUserModel iuser = new UserModel; 这样写是不是就是将UserModel中的接口赋值给iuser,然后通过iuser调用其中的方法,而方法的实现是在UserModel中?

展开
收起
kun坤 2020-06-09 09:35:16 574 0
1 条回答
写回答
取消 提交回答
  • 首先,澄清下1楼的说法,这并不是所谓的安卓MVP模式的写法,而是JAVA语法的特性(多态),看来学Android的人JAVA都不怎么好啊,大家好好巩固下JAVA基础吧。 然后,这种写法,主要是为了对外解耦,规范外部调用,让调用者不用关心我的实现,而我自己也可以有多种实现方式。######回复 @菜鸟早起 : 谢谢指导,确实是多态,很久没回顾JAVA了,概念有点混淆######你确定这是继承,而不是多态?######楼主说的对。这是MVP模式里面的一种用法,你可以去看看######就是最近在看MVP不是很肯定我的想法,上这来请教的。谢谢!######楼主没说mvp吧,而且这个和mvp没有关系######楼主的问题本身有问题,应该改成:“一个变量或字段是接口类型的,它的值是一个类的实例,这个类实现了该接口,比如:IUserModel iuser = new UserModel();”,实例跟对象指的是同一个东西,类是创建对象的模板,对象是类的实例,所以创建对象也叫实例化。 所以不是“将UserModel中的接口赋值给iuser”而是将UserModel的实例赋值给iuser。 在Java8引入接口默认方法之前,接口中的方法都是没有实现的,说“方法的实现是在UserModel中”没有问题,但在Java8中就不一定了。######说完了楼主问题中的问题,再来回答一下楼主的问题:“为什么能这样写?”,因为Java作为一个面向对象的语言遵循了“里氏替换原则”,即一个对象可以赋值给它所继承的类或所实现的接口的变量。

    2020-06-09 09:35:21
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载