JAVA抽象类和接口

#1、抽象类 若是一个类没有足够的信息来描述一个具体的对象,而须要其余具体的类来支撑它,那么这样的类咱们称它为抽象类;java

在面向对象领域因为抽象的概念在问题领域没有对应的具体概念,因此用以表征抽象概念的抽象类是不能实例化的。安全

抽象类体现了数据抽象的思想,是实现多态的一种机制。它定义了一组抽象的方法,至于这组抽象方法的具体表现形式有派生类来实现。同时抽象类提供了继承的概念,它的出发点就是为了继承,不然它没有存在的任何意义。因此说定义的抽象类必定是用来继承的,同时在一个以抽象类为节点的继承关系等级链中,叶子节点必定是具体的实现类;.net

建立抽象类和抽象方法很是有用,由于他们可使类的抽象性明确起来,并告诉用户和编译器打算怎样使用他们.抽象类仍是有用的重构器,由于它们使咱们能够很容易地将公共方法沿着继承层次结构向上移动。对象

注意特征:blog

  1. 抽象类不能被实例化,实例化的工做应该交由它的子类来完成,它只须要有一个引用便可。
  2. 抽象方法必须由子类来进行重写。
  3. 只要包含一个抽象方法的抽象类,该方法必需要定义成抽象类,无论是否还包含有其余方法。
  4. 抽象类中能够包含具体的方法,固然也能够不包含抽象方法。
  5. 子类中的抽象方法不能与父类的抽象方法同名。
  6. abstract不能与final并列修饰同一个类。
  7. abstract 不能与private、static、final或native并列修饰同一个方法 。

#2、接口 接口是一种比抽象类更加抽象的“类”。这里给“类”加引号是我找不到更好的词来表示,可是咱们要明确一点就是,接口自己就不是类,从咱们不能实例化一个接口就能够看出。如new Runnable();确定是错误的,咱们只能new它的实现类。继承

接口是用来创建类与类之间的协议,它所提供的只是一种形式,而没有具体的实现。同时实现该接口的实现类必需要实现该接口的全部方法,经过使用implements关键字,他表示该类在遵循某个或某组特定的接口,同时也表示着“interface只是它的外貌,可是如今须要声明它是如何工做的”。接口

接口是抽象类的延伸,java了保证数据安全是不能多重继承的,也就是说继承只能存在一个父类,可是接口不一样,一个类能够同时实现多个接口,无论这些接口之间有没有关系,因此接口弥补了抽象类不能多重继承的缺陷,可是推荐继承和接口共同使用,由于这样既能够保证数据安全性又能够实现多重继承。get

注意特征:编译器

  1. Interface的方全部法访问权限自动被声明为public。确切的说只能为public,固然你能够显示的声明为protected、private,可是编译会出错!
  2. 接口中能够定义“成员变量”,或者说是不可变的常量,由于接口中的“成员变量”会自动变为为public static final。能够经过类命名直接访问:ImplementClass.name。
  3. 接口中不存在实现的方法。
  4. 实现接口的非抽象类必需要实现该接口的全部方法。抽象类能够不用实现。
  5. 不能使用new操做符实例化一个接口,但能够声明一个接口变量,该变量必须引用(refer to)一个实现该接口的类的对象。可使用 instanceof 检查一个对象是否实现了某个特定的接口。例如:if(anObject instanceof Comparable){}。
  6. 在实现多接口的时候必定要避免方法名的重复。

#3、区别编译

  1. 语法层次不一样;
  2. 抽象类能够拥有任意范围的成员数据,同时也能够拥有本身的非抽象方法,可是接口中,它仅可以有静态、不能修改的成员数据;
  3. 对子类而言,它只能继承一个抽象类(这是java为了数据安全而考虑的),可是却能够实现多个接口;
  4. 接口的全部方法都是抽象的;
  5. 抽象层次不一样:抽象类是对类抽象,而接口是对行为的抽象;

参考文献:
http://blog.csdn.net/chenssy/article/details/12858267

相关文章
相关标签/搜索