java中类与接口的优缺点?
从来没有看到过这类问题,类与接口没有什么优缺点的说法,它们面向对象程序设计语言中的必要组成部分,这个问题应该是问它们的区别,而不是问什么优缺点。
类是具体实现,接口是抽象定义。也就是说接口是定义所有实现它的类的对外表现形式。而类是接口定义的具体实现。。。同一个接口的实现方式有很多种(很多类来实现它),同一个类也可以实现很多接口
我不是理论大师,也不拿相关定义来忽悠你了,给你举一个简单的例子吧
ArrayList和LinkedList,一个是数组结构的列表,一个是链表结构的列表,它们都实现了List接口。如果在检索方面要求较高,则使用ArrayList,因为它是数组实现的,可以直接根据下标定位到其中的对象在内存中的引用。而如果频繁的插入删除,则应该使用LinkedList,因为它的插入删除仅仅修改内存引用就行了。而它们对外的行为模式差不多(LinkedList还实现了Queue接口,这个就不说了),所以让它们都来实现List接口。实际上程序如果不使用接口,也是完全能跑得通的,但以后代码维护就等着哭吧...
比如说,我现在有一个类型转换器,将String型转换成其他Long、Integer、Date等类型。但我不知道具体要转换成哪一个,只能在程序运行过程中才能知道,那么就可以有一种实现方式,定义Converter接口,具体实现类包括LongConverter、IntegerConverter和DateConverter等。再有一个ConverterFactory,ConverterFactory.getConverter(Class clazz)来返回具体的Converter的实现类,此时程序运行过程中只要传递我要转换成的类的Class对象,就可以取得相应的Converter实现类,比如调用ConverterFactory.getConverter(Date.class);,它的返回表面上是Converter,但实际上就是实现 了Converter接口的DateConverter的转换器。这个时候,你就可以用这个Converter对象来将传入的String转换成Date类型数据了,而不是转换成其他类型的。
Java中为什么要引进接口的概念?
java接口的用处主要体现在下面几个方面:
(1)通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。
(2)通过接口可以指明多个类需要实现的方法。
(3)通过接口可以了解对象的交互界面,而不需了解对象所对应的类。
类描述了一个实体,包括实体的状态,也包括实体可能发出的动作。
接口定义了一个实体可能发出的动作。但是只是定义了这些动作的原型,没有实现,也没有任何状态信息。
所以接口有点象一个规范、一个协议,是一个抽象的概念;而类则是实现了这个协议,满足了这个规范的具体实体,是一个具体的概念。
从程序角度,简单理解,接口就是函数声明,类就是函数实现。需要注意的是同一个声明可能有很多种实现。
1、接口中定义类方法的原型,但是不能说是空方法,因为空方法的意思是有实现体,只不过实现体是空操作。实际上接口没有定义任何实现体。具体的实现体都是在实现接口的类中,接口只是定义了这些方法的调用方式。
你当然也可以不用接口,直接在类里面写方法,但是如果你的一组方法需要在很多类里实现,那么把它们抽象出来,做成一个接口规范,不是更好么?
2、一个类描述了一个实体,这个实体可能是一个复杂的对象,它的动作很多,如果把这些动作分类,用接口a定义其中的某一组动作,接口b定义其中的另外一组动作,这样的结构,比较清楚。
这种方式具备了多继承的优点,避免了多继承的缺陷。实际上在历史上,接口在很大程度上,是为了解决多继承带来的种种问题而设计出来的。
3、包中那些已定义的接口,怎么知道那里面定义了什么方法。
接口里定义了方法的输入输出,这些都是协议,具体的实现都在每个类中。对于很多只需要抽象接口的地方,不需要知道具体的类是什么,只要这个类实现了这个接口就可以了。