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

发布于 2021-12-07 05:06:33 字数 168 浏览 835 评论 8

如题,Android或java中,一个接口的对象,它的实例是一个类,这个类实现了该接口,比如:IUserModel iuser = new UserModel;

这样写是不是就是将UserModel中的接口赋值给iuser,然后通过iuser调用其中的方法,而方法的实现是在UserModel中?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

毁梦 2021-12-09 12:01:12

说完了楼主问题中的问题,再来回答一下楼主的问题:“为什么能这样写?”,因为Java作为一个面向对象的语言遵循了“里氏替换原则”,即一个对象可以赋值给它所继承的类或所实现的接口的变量。

复古式 2021-12-09 11:50:07

楼主的问题本身有问题,应该改成:“一个变量或字段是接口类型的,它的值是一个类的实例,这个类实现了该接口,比如:IUserModel iuser = new UserModel();”,实例跟对象指的是同一个东西,类是创建对象的模板,对象是类的实例,所以创建对象也叫实例化。

所以不是“将UserModel中的接口赋值给iuser”而是将UserModel的实例赋值给iuser。

在Java8引入接口默认方法之前,接口中的方法都是没有实现的,说“方法的实现是在UserModel中”没有问题,但在Java8中就不一定了。

草莓味的萝莉 2021-12-09 11:24:15

楼主没说mvp吧,而且这个和mvp没有关系

彼岸花ソ最美的依靠 2021-12-09 09:14:51

就是最近在看MVP不是很肯定我的想法,上这来请教的。谢谢!

静谧 2021-12-09 06:11:06

楼主说的对。这是MVP模式里面的一种用法,你可以去看看

爱你是孤单的心事 2021-12-09 04:28:43

你确定这是继承,而不是多态?

各自安好 2021-12-08 16:33:32

回复
谢谢指导,确实是多态,很久没回顾JAVA了,概念有点混淆

瑾夏年华 2021-12-07 10:44:03

首先,澄清下1楼的说法,这并不是所谓的安卓MVP模式的写法,而是JAVA语法的特性(多态),看来学Android的人JAVA都不怎么好啊,大家好好巩固下JAVA基础吧。

然后,这种写法,主要是为了对外解耦,规范外部调用,让调用者不用关心我的实现,而我自己也可以有多种实现方式。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文