java中的接口、抽象类和类

来源:互联网 发布:羽绒服 知乎 编辑:程序博客网 时间:2024/05/24 15:36

1.接口


定义



在使用接口过程中需要注意如下几个问题:

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


2.抽象类


抽象类的定义




在使用抽象类时应该注意一下几点:


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


3抽象类和接口的关系


抽象层次不同:抽象类是对类的抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为、但是接口确是对类局部(行为)的抽象。

跨域不同:抽象类所跨域的是具有相似特点的类,而接口却可以跨越不同的类。例如猫狗可以抽象成一个动物类抽象类,具备叫的方法。鸟、飞机可以实现Fly接口,具备飞行的行为。抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在“is-a”的关系,既父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口的定义在概念上是一致的,仅仅是实现了接口定义的契约而已。

设计层次不同:对于抽象类而言,它是自下而上设计的,我们要先知道子类才能抽象出父类,而接口则不同,他根本不需要知道子类的存在,只需要定义一个规则即可,至于什么子类,什么时候实现它一概不知。抽象类是自底向上抽象来的,接口是自顶向下设计出来的。


总结:


      1、 抽象类在java语言中所表示的是一种继承关系,一个子类只能存在一个父类,但是可以存在多个接口。
      2、 在抽象类中可以拥有自己的成员变量和非抽象类方法,但是接口中只能存在静态的不可变的成员数据(不过一般都不在接口中定义成员数据),而且它的所有方法都是抽象的。
      3、抽象类和接口所反映的设计理念是不同的,抽象类所代表的是“is-a”的关系,而接口所代表的是“like-a”的关系。
      抽象类和接口是java语言中两种不同的抽象概念,他们的存在对多态提供了非常好的支持,虽然他们之间存在很大的相似性。但是对于他们的选择往往反应了您对问题域的理解。只有对问题域的本质有良好的理解,才能做出正确、合理的设计。


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


0 0
原创粉丝点击