一般对象比如有个具体的类Person已定义好,要实例化它, 采取的语法是 Person objPerson = new Person();
但接口(如IConnection)不能这么做,其不能直接New 自己,如 IConnection objIConnection = new IConnection(),
这就是说"照例不可以生成接口的对象"的含义.
但面向对象都具有多态,可以向上转型, 比如某个类实现了该接口,如类Connection实现了该接口,则Connection类的
实例化对象可以给IConnection接口. 如 IConnection objIConnection = new Connection()
然后编程都基于接口进行操作,这样脱离了具体的类的实现,在某些场合就更灵活和易于扩充.
把变的东西抽象出来了,成了接口,反倒就让代码相对固定了,能适应变化的情况.
接口不能实列化,但是可能通过某些类创建接口的对类
==================================================
接口不能“直接”实例化。--msdn //没说不能“间接” “间接”实例化接口 接口 实例 = new 实现接口的类() 长见识
===================================================
类-抽象类-接口总结 近期通过对Java一些基础知识的学习,我熟悉了类抽象类以及接口这三个概念,先将其区别与联系总结如下! 1 三者最大的[color=indigo]区别在[u][/u]于类具有构造器从而可以来构造对象!而抽象类与接口中的方法都是未完全实现,他们都是一种抽象模型,不具备构造对象的能力!但是可以通过实现(implements)接口和继承(extends)抽象类来创建类从而来构造对象! 2在定义上:类的定义模式是public+class+类名[b];抽象类的定义public+abstract+clas+类名;接口的定义格式public+interface+类名 3在方法上类的方法必须有实现而抽象类的方法可以根据需要部分实现;而接口中的方法只能有其定义没有具体的实现,就是说接口中的方法都是抽象的方法!抽象类中可以有非抽象方法。接口中则不能有实现方法 4抽象类和接口在继承和实现时子类对父类中未实现的方法必须实现可对其进行重写! 5接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变!
=============================================================
抽象类,通过继承它实现多态,后期绑定,可以为将来要实现的东西做好接口,实现重用性。
InterfaceA IA = new InterfaceA();
编译器报错:Cannot instantiate the type TA 指明接口只能被声明,不能被实例化。
简单工厂设计模式
设定一个Class名称是AClass,在面向对象编程中,一般一个Class都会继承一个接口,设定AClass的接口为AInterface,那么生成AClass的对象方法如下:
AInterface a = new AClass();
改写成下列方式: AInterface a = Afactory.create(); //代码2
Afactory的create方法封装了具体创建细节。解耦了创建过程和使用过程,系统可扩展性增强,稳定性增强。 Afactory的create方法代码: public static AInterface create(){ …… return new AClass(); }
上面代码2这一行是使用Afactory的create方法来生成AInterface实例。
由于是初学者,之前一直对上面这句很困惑,前几天看到一个用抽象类实现接口的案例,为什么不直接用抽象类的实例的方法?
网上的解答:
接口是强制性的,它的所有方法都要实现。
但是抽象类不是,比如说一个接口,你只用到其中的一两个方法,可是如果直接实现接口需要实现里面的五个方法,这时候你可以先让抽象类实现接口,然后你的类继承接口,就不需要都实现接口的方法了而且接口的抽象层次要更高,是一种契约,抽象类是提供了很多的方法,给你用,没有强制性。
抽象类和接口比起来,有一个好处,就是某些函数可以实现具体的方法,而并不一定是声明抽象的方法,而接口只能声明抽象方法,所以用一个抽象类来实现某个接口可以实现一些通用的方法,而这些具体实现的方法里还可以调用抽象方法,所以减少了子类中的重复代码
=======================================================
我也谈谈抽象类和接口的理解,它们最根本的区别是:
- 抽象类的子类是继承,而接口的子类是实现.唯一性的继承让子类有其父类除私有外的一切责任和义务,意味着更与父类有更紧密的耦合;接口则不是唯一的,可根据需要实现或不实现,这种可选择性意味着松耦合和灵活.
所以,如果是极少变动的,或者说内置的特征,我们用抽象类,比如性别,一旦出生,性别就固定,那继承自male类即使高耦合也没什么影响.但你从事什么职业,却是很可能变动的,你今天可能是程序员,明年则可能干起了个体户,那implement一个programmer接口更合适.其实你也许已经注意到,一旦你继承male类,你就和male紧密的耦合了,因为你一辈子都生不了孩子,而不像programmer那样,你还有的选...
强烈推荐"敏捷软件开发-原则模式和实践"这本书,对提高编码质量,或将思维从实现提升设计层面,都很有帮助.
==============================================================