万物既然都是对象.
interface是如何继承Object类的呢???
当然有人在网上说他不继承Object.OK 那么请看一段代码
在spring中 我写了一个简单接口
public interface A{
public void run();
}
public class B implments A{
public void run(){
------dosomthing----
}
}
我在xml里面配置好了
最后我做一下测试
ApplicationContext ac=new classPathXmlApplication("bean.xml");
注意!就在这里
A a=ac.getBean(A.class);
a.run();
这个接口竟然生成了 class文件!而且在编译期间就不会报错.
程序还会依然执行!!!!
(PS:这个写法只支持一个bean一个接口)
求大师解惑 接口到底是什么? getBean底层到底是如何实现的这段代码?
接口可以实例化
一般对象比如有个具体的类Person已定义好,要实例化它, 采取的语法是 Person objPerson = new Person();
但接口(如IConnection)不能这么做,其不能直接New 自己,如 IConnection objIConnection = new IConnection(),
这就是说"照例不可以生成接口的对象"的含义.
但面向对象都具有多态,可以向上转型, 比如某个类实现了该接口,如类Connection实现了该接口,则Connection类的
实例化对象可以给IConnection接口. 如 IConnection objIConnection = new Connection()
然后编程都基于接口进行操作,这样脱离了具体的类的实现,在某些场合就更灵活和易于扩充.
把变的东西抽象出来了,成了接口,反倒就让代码相对固定了,能适应变化的情况.
接口不能实列化,但是可能通过某些类创建接口的对类
看上面所说接口不能实例化,这是不容置疑的
只是可以这样用:
实例化对象可以给IConnection接口. 如 IConnection objIConnection = new Connection()
接口不可以实例化。但是接口对象可以指向它的实现类对象。
http://blog.csdn.net/zhangxiaoxiang/article/details/1173253
所有对象继承自Object是JVM处理的,可以看下《深入Java虚拟机》.
接口不继承Object,接口只是定义了一写规范(抽象函数),实现该接口的类必须满足该规范。你的a引用是B类的对象。
getBean底层底层应该就是通过你的配置去实例化B类对象的(仅供参考)
大家说的都非常棒,只不过都是解释的都非常浅薄.
所以我打算看一看jvm虚拟机 看完回头在看看这个问题.还有 我完善一下二楼的回答
interface是一种概念,一直秉持着向后兼容的特性.因为这个特性导致了我们程序可以解耦,但相对的这里会衍生出来一个执行效率代价问题.
这就是反射. 先解答到这里,说的不好的地方 请列位一一指出.
接口是对象?? 不是吧
对象是由class实例出来的(new出来的),,,接口都不是类,,它怎么能使对象尼?
接口是一种规范(协议,标准)。。。。有的编程语言(Object-C)已经不把接口叫 interface,直接叫 protocol。
B类可以实例化对象,它的对象类型是B,没错吧,,,,
B实现了A(这个标准),,那么B的实例的类型,,是 B或者A(面向对象的里氏代换原则)
A a=ac.getBean(A.class);,,这句话回去取,A类型的bean(实例),,你既然在xml中配置了,,
那么,就能取到(你换成B.class,结果是一样的,,因为你配置的bean的类型是: B或者A)
不知道说明白了没,,希望对你有帮助
Java作为一个强类型的面向对象的语言,他所有的成员和方法都是定义在类中的,但还存在一种与类平行的东西,就是interface,里面包含抽象方法和常量,说白了接口就是一个模板,需要你实现它的。就好比说,你装各个样子的水龙头,你就要实现他们各自的标准。
至于题主说的getBean怎么实现的,我想应该是这样的:
众所周知,接口是不能直接实例化的。但是你对接口A进行了实现,并在配置文件中进行了配置,那么springIOC容器就会加载配置文件,帮你创建A接口实现的实例,向上造型(父类引用指向子类实例),至于如何创建,依赖于Java反射机制。
本屌实力有限,希望能为你解惑,如有错误请大家批评指正!
楼主搞明白了麻烦说一声,我也很想知道。