`

举例说明你什么时候会用抽象类,什么时候更愿意使用接口?

    博客分类:
  • java
阅读更多
接口和抽象类都按照“不为实现写代码”的设计原则,这是为了增加代码的灵活性,以应付不断变化的要求。
在Java中,你只能继承一个类,但实现多个接口。所以你继承一个类的时候就无法再继承别的类了。
接口是用来代表形容词或行为,例如Runnable、Clonable、Serializable等。因此,如果您使用一个抽象类来定义(实现)Runnable和Clonacle,你就不可以使你的类同时实现这

两个功能,而如果接口的话就没问题。
抽象类是比接口稍快,所以很在乎时间的应用尽量使用抽象类。
如果多个继承层次的共同行为在同一个地方编写更好,那么抽象类会是更好的选择。有时候可以在接口里定义函数但是在抽象类里默认功能就能实现接口和抽象类共同工作了。
用Java设计一个并发规则管道?
并发编程和并行设计非常热门,因为它能更高效地利用现在越来越先进的处理器,而且Java被认为是多线程语言也主要因为此原因。设计一个并发系统的关键在于线程安全、不可变

性、本地变量,还有避免使用局部变量和实例变量。你只需要保证多个线程能够在同一时间执行同一个类,所以最佳解决方案就是每个线程只操作自己的数据,尽量使用最小的同步

,尤其是在管道开始时。这个问题可以从初始讨论到最终类和接口的编写实现,但是只要你记得注意并发问题的关键,比如竞争状态、死锁、内存冲突、原子操作、ThreadLocal变

量等等,尽量绕过这些问题。
       1.abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。

  2.在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是 static final的,不过

在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

  3.abstract class和interface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

  4.实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

  5.接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

  6.抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

  7.接口中的方法默认都是 public,abstract 类型的。
   
super和this的区别+接口和抽象类的区别 :
  1.super可以理解成是指向父类对象的引用,可以在子类里,使用super调用父类里被覆盖掉的方
  法或者变量。this可以理解为指向自身对象的引用,可以调用同一个类中的方法或变量。
2.静态变量和静态方法都是属于类的,也就是说,可以不用new一个对象,而直接用类来调用,
  静态变量在内存中只有一份拷贝,类的所有实例共享静态变量。
3.继承使用extends关键字实现,eg: class Dog extends Animal{}。
4.接口和抽象类的区别:
  1.接口体现的是一种规范,抽象类体现的是模板式设计。
  2.接口里的方法全部是抽象方法,抽象类里可以有方法实现。
  3.接口里不可以定义静态方法,抽象类里可以。
  4.接口里的变量全部为静态常量,抽象类里可以有普通变量。
  5.接口里不可以有构造函数和初始化块,抽象类里可以有。
  6.一个类可以实现多个接口,但只能继承一个抽象类。

“接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真分析,还是

有不少的:在JAVA中,类只能是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的;接口就不一样了,它不但可以用一个类或结构实

现多个接口,一个接口还可以有多个实现。”

抽象类是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能,它可以提供已实现的成员,因此,可以

用抽象类确保特定数量的相同功能,但不能用接口这样做。
“也就是说,它们在提供多态性的问题上是有差别的

有个通用的设计思想,如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。”

如果使用适当,接口可以成为很有用的工具。但如果使用不当,它们会变得非常棘手,甚至妨碍有效的编程。接口的设计与使用其实是一项高明的艺术。”

“通过接口与实现的方式,我们可以将同一类型的程序运用在不同的对象上面,而且不必修改原有类,相对子程序必须通过修改源程序代码才能够达到重用的目的,接口与实现不仅

是伟大的进步,也是境界极高的程序设计艺术。” 

   接口是一种非常有效的编程方法,它让对象的定义与实现分离,从而可以在不破坏现有应用程序的情况下使对象得以完善与进化。接口消除了实现继承的一个大问题,就是在对设

计实施后再对其进行更改时很可能对代码产生破坏。即使实现继承允许类从基类继承实现,在类首次发布时仍然会使我们不得不为设计做很多的抉择。如果原有的设想不正确,并非

总可以在以后的版本中对代码进行安全的更改。比如,我们定义了一个基类的方法,它需要一个 Integer 参数,而后来又确定该参数应该为 Long 数据类型。我们无法安全更改原始

类,因为为从原始类派生的类所设计的应用程序可能无法进行正确编译。这一问题会扩大化,因为单个基类会影响几百个子类。”

   在应用程序要求很多可能不相关的对象类型以提供某种功能的情况下,用接口适用性会更强;接口比基类更灵活,因为可以定义单个实现来实现多个接口;在无需从基类继承实现

的情况下,接口更好;在无法使用类继承的情况下接口是很有用的。例如,结构无法从类继承,但它们可以实现接口。”

“但是,最大的问题还是集中在接口设计上。接口一旦被定义和接受,就必须保持不变,以保护为使用该接口而编写的应用程序。接口发布后,就不能对其进行更改。这是我们进行

组件设计的一个重要原则,叫做‘接口不变性’。”
   创建一个接口就是在创建一个定义,接口定义发布后则永远不能更改。接口不变性,就是为了保护为使用接口而编写的现有系统。当接口设计与需求有所出入,确认需要大幅度变

更时,我们应该创建新的接口。
  
3
5
分享到:
评论
1 楼 Mybeautiful 2013-05-20  
抽象类跟接口的本质区别在于,抽象类是为了重用,接口是为了解耦。

http://mybeautiful.iteye.com/blog/628672

相关推荐

Global site tag (gtag.js) - Google Analytics