接口可以实例化吗?
在Hibernate帮助文档中看到这个这个例子
SessionFactory sessionFactory = config.buildSessionFactory(); Session session = sessionFactory.openSession();
Session 和 SessionFactory 都是接口,为什么能声明一个Session类型的实例,并赋值呢?
请多多指点
------解决方案--------------------InterfaceA IA = new IterfaceAImpl();
明白?
------解决方案--------------------接口 a = new 实现该接口的类();
针对接口写的代码具有极大的通用性,也是面向对象的重要特性之一
------解决方案--------------------用的最多的例子:
List list = new ArrayList();
一样的道理。。。。。
------解决方案--------------------以上都是正确的。up
------解决方案--------------------唉?我们老师告诉我们如果是接口类的话是不能够用 “new”来创建实例的吧?只能用接口类里的一些赋值的方法来初始化实例呀`~
------解决方案--------------------可以把接口看成一种特殊的类,这样就应该能理解了吧,,
------解决方案--------------------不能,可通过类继承后在实例化
------解决方案--------------------面向接口编程
List是接口,有两个类实现了它,ArrayList类和LinkedList类。List类型要大于它的了两个派生类型。
在 List list = new ArrayList(); 这句:
因为 List 是接口,所以 list 对象可以由 ArrayList 向上转型成它的接口 List,我们就直接对 List 接口进行编程。
接口只能作为类型,类才能实例化。
------解决方案--------------------楼主基础不过关就玩hibernate,汗一个~~~~~~~
创建一个SessionFactory,并不一定要指明具体是哪个SessionFactory,只要它实现了SessionFactory中的方法即可。就像你饿了时候会说,“来点儿吃的”,你并不在乎具体是什么食物,只要是能吃的就行。
------解决方案--------------------可以, 基本上和一个普通的类没有什么区别。
------解决方案--------------------虽然我没看过hibernate的API,但是可以猜到config.buildSessionFactory()大概是这么写的
public 类名 buildSessionFactory()
{
……
return (new 类名);
}
大概就是这样的,这样附值给sessionFactory就没有什么问题了。
------解决方案--------------------我说一句废话吧:sessionFactory肯定是接口SessionFactory的某个实现类的一个实例
------解决方案--------------------你把得到的对象toString()一下,可以看到它的地址,前边部分就是这个对应的class ,你看看,应该是SessionFactory的一个实现,而不是SessionFactory本身。
------解决方案--------------------不能,他跟抽象类一样都不能用new来实现
接口就是为了实现多重继承,没必要去实例化
------解决方案--------------------多态的吧。。
接口里没的构造方法,那不叫实例化接口的吧。。
------解决方案--------------------sessionFactory 只是一个引用,它可以指向任何一个实现了 SessionFactory 接口的类的实例。而 config.buildSessionFactory() 返回的正是一个实现了 SessionFactory 接口的类的实例的引用,而不是 SessionFactory 接口的实例的引用。