为什么实现接口就可以实现功能?

来源:百度知道 编辑:UC知道 时间:2024/06/10 00:51:08
例如多线程的一个接口叫Runnable(不知道是不是这样拼写的),就可以实现多线程?谁调用了它?又是谁调用了实现这个接口的类?
例如实现了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 看看把!

就像吃馒头,你已经会吃了,他给你提供蒸着吃、炸着吃、烤着吃等几种方法,他关心的不是你使用哪种方法吃,他只关心“吃”,只要吃,他就挣钱了。

JVM也是一样,
多线程其实jvm(系统)已经实现了,他给你的runnable就是一个使用这个多线程功能的方法。不管你使用那个方法,他所关心的只是“多线程”,也就是你在多线程中要做的事情,有了这个,他就有办法新开一个线程去执行它。所以他给你的只是 “你告诉他要在多线程中干什么”,其实并不是你实现了多线程,而是你成功的告诉了他。只要你提供的对象有Run方法,他就在新线程中执行这个方法就对了。
别的什么都不管。

系统会自动调用我实现接口的这个类

Thread(Runnable target)
java中调用Thread的start() 使该线程开始执行;
Java 虚拟机调用该线程的 run