为什么实现接口就可以实现功能?
例如多线程的一个接口叫Runnable(不知道是不是这样拼写的),就可以实现多线程?谁调用了它?又是谁调用了实现这个接口的类?例如实现了RequestAware接口,就可...
例如多线程的一个接口叫Runnable(不知道是不是这样拼写的),就可以实现多线程?谁调用了它?又是谁调用了实现这个接口的类?
例如实现了RequestAware接口,就可以得到session,是怎么调用的?
能否写个例子?
我自己想到的只有instanceof和反射,
我觉得有那么多接口,不可能一个一个的 if(xx instanceof ss)吧.
或者一个一个的Class.getInterfaces判断?
我说的是为什么实现一个接口,就可以实现相应的功能,我自己没有调用这个接口或者实现接口的这个类,我只实现接口,为什么系统会自动调用我实现接口的这个类,从而实现相应的功能?
就算是用if(xx instanceof ss),那系统是怎么知道我实现接口的类名?
不用Runnable举例了,因为Runnable执行之前还有调用Thread(不知道是不是叫这名,很久不用这玩意了),我想问的是,为什么系统会自动调用我实现接口的这个类,从而实现相应的功能?系统是怎么知道我实现接口的类名?
daay1986,你没明白我的意思.你说的父类接口引用子类方法,这个我知道.
我说的是,我只实现接口,我根本就不调用我实现的类, 不new我的实现类,更没有父类接口引用子类方法.
系统就自动知道我的实现类的类名,自动给我new了一个出来.
这个应该叫控制反转吧.我想知道原理.
- -!
没人能告诉我吗?
我想要个例子 展开
例如实现了RequestAware接口,就可以得到session,是怎么调用的?
能否写个例子?
我自己想到的只有instanceof和反射,
我觉得有那么多接口,不可能一个一个的 if(xx instanceof ss)吧.
或者一个一个的Class.getInterfaces判断?
我说的是为什么实现一个接口,就可以实现相应的功能,我自己没有调用这个接口或者实现接口的这个类,我只实现接口,为什么系统会自动调用我实现接口的这个类,从而实现相应的功能?
就算是用if(xx instanceof ss),那系统是怎么知道我实现接口的类名?
不用Runnable举例了,因为Runnable执行之前还有调用Thread(不知道是不是叫这名,很久不用这玩意了),我想问的是,为什么系统会自动调用我实现接口的这个类,从而实现相应的功能?系统是怎么知道我实现接口的类名?
daay1986,你没明白我的意思.你说的父类接口引用子类方法,这个我知道.
我说的是,我只实现接口,我根本就不调用我实现的类, 不new我的实现类,更没有父类接口引用子类方法.
系统就自动知道我的实现类的类名,自动给我new了一个出来.
这个应该叫控制反转吧.我想知道原理.
- -!
没人能告诉我吗?
我想要个例子 展开
展开全部
何必这么死呢,系统定义一个方法,吃饭,你实现了,系统就知道你会吃饭了,就这么简单。你只负责怎么吃饭,怎么叫你吃饭,不是你管理的事情。
接口是类,你实现接口那就是他的子类,你自然就有接口的方法了,人不管你实现接口的类名是什么,只要确定你实现了这个接口就行了,这就是多态,子类对象可以直接拿父类引用来用的。
比如:你一个xxx这个类实现了Runnable,那人家就可以拿Runnable类型引用来使用你的那个xxx对象了,接口目的是定义行为,我只要知道你的行为就行,就像吃饭,系统只要知道你会吃饭就行,而不管你是动物还是人。理解这个问题关键是多态,系统不需要知道你的类名,他只要知道你会吃饭就行了,至于是男是女不是他关心的,他只关心接口定义的行为,其他信息他不想知道。
你还是看继承和多态把。3大基本性质要熟记于心,不只是记得个概念就完事的,要联系到实际代码。
要是不明白就hi给我留言!
http://baike.baidu.com/view/1486379.htm?fr=ala0 看看把!
接口是类,你实现接口那就是他的子类,你自然就有接口的方法了,人不管你实现接口的类名是什么,只要确定你实现了这个接口就行了,这就是多态,子类对象可以直接拿父类引用来用的。
比如:你一个xxx这个类实现了Runnable,那人家就可以拿Runnable类型引用来使用你的那个xxx对象了,接口目的是定义行为,我只要知道你的行为就行,就像吃饭,系统只要知道你会吃饭就行,而不管你是动物还是人。理解这个问题关键是多态,系统不需要知道你的类名,他只要知道你会吃饭就行了,至于是男是女不是他关心的,他只关心接口定义的行为,其他信息他不想知道。
你还是看继承和多态把。3大基本性质要熟记于心,不只是记得个概念就完事的,要联系到实际代码。
要是不明白就hi给我留言!
http://baike.baidu.com/view/1486379.htm?fr=ala0 看看把!
广东轻亿云软件
2024-05-14 广告
2024-05-14 广告
广东轻亿云软件科技有限公司在软件开发领域深耕多年,积累了丰富的经验和技术实力。我们深知API接口在现代软件开发中的重要性,因此,我们与多家业界领先的API接口提供商保持着紧密的合作关系,确保我们的产品和服务能够充分利用这些接口,为用户提供更...
点击进入详情页
本回答由广东轻亿云软件提供
展开全部
就像吃馒头,你已经会吃了,他给你提供蒸着吃、炸着吃、烤着吃等几种方法,他关心的不是你使用哪种方法吃,他只关心“吃”,只要吃,他就挣钱了。
JVM也是一样,
多线程其实jvm(系统)已经实现了,他给你的runnable就是一个使用这个多线程功能的方法。不管你使用那个方法,他所关心的只是“多线程”,也就是你在多线程中要做的事情,有了这个,他就有办法新开一个线程去执行它。所以他给你的只是 “你告诉他要在多线程中干什么”,其实并不是你实现了多线程,而是你成功的告诉了他。只要你提供的对象有Run方法,他就在新线程中执行这个方法就对了。
别的什么都不管。
JVM也是一样,
多线程其实jvm(系统)已经实现了,他给你的runnable就是一个使用这个多线程功能的方法。不管你使用那个方法,他所关心的只是“多线程”,也就是你在多线程中要做的事情,有了这个,他就有办法新开一个线程去执行它。所以他给你的只是 “你告诉他要在多线程中干什么”,其实并不是你实现了多线程,而是你成功的告诉了他。只要你提供的对象有Run方法,他就在新线程中执行这个方法就对了。
别的什么都不管。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
jvm做这个判断的时候是不需要这么麻烦的。你写的java语法,jvm做的时候是c++语法,是可以直接控制内存的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Thread(Runnable target)
java中调用Thread的start() 使该线程开始执行;
Java 虚拟机调用该线程的 run 方法。
搞不明白你问的是什么,去看看java虚拟机规范吧
java中调用Thread的start() 使该线程开始执行;
Java 虚拟机调用该线程的 run 方法。
搞不明白你问的是什么,去看看java虚拟机规范吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2009-12-31
展开全部
系统会自动调用我实现接口的这个类
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询