码迷,mamicode.com
首页 > 其他好文 > 详细

抽象类和接口

时间:2015-09-22 16:07:07      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

抽象类和接口是java语言中对于抽象定义的两种机制,正是由于这两种机制的存在,才赋予了java强大的面向对象能力。

抽象类和接口之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多初学者对使用哪个总是混淆。

所以本文将

  ①分别介绍抽象类和接口

  ②对两者的区别进行剖析

一:抽象类

  ①概念:

  抽象类和一般类没有太大的区别,都是在描述事物,只不过抽象类在描述事物时,有些功能不具体。所以抽象类和一般类在定义上,都是需要定义属性和行为的。只不过,比一般类多了一个抽象函数。而且比一般类少了一个创建对象的部分。is a

  ②特点:

  1.抽象方法只能定义在抽象类中,抽象类和抽象方法必须被abstract修饰,但抽象类中可以不定义抽象方法。

  2.抽象类不可以被实例化

  3.只有通过子类继承抽象类并覆盖了抽象类中的所有抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

  4.抽象类中有构造方法,是用于给子类对象初始化的。

  5.抽象类关键字abstract不可以和final,private,static共存。

  ③什么时候用:

  在描述一个行为的时候,这个行为有N种动作,这时候就要用到抽象类了。

二:接口

  ①概念:

  抽象类是描述一个事物本质的内容的,而接口则是对一个事物的扩展。like a

  Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

  ②特点:

  1.是用关键字interface定义的

  2.接口中的成员都有固定的修饰符

    成员变量:public static final

    成员函数:public abstract

    eg:     

interface Inter{
    public static final int x = 3;
    public abstract void show();
}

  3.接口中的方法都是抽象方法,而且接口不可以被实例化,接口的子类必须实现了接口中所有的抽象方法后,该子类才可以实例化。否则,该子类还是一个抽象类。

  4.一个类在继承另一个类的同时,还可以实现多个接口,这就是多继承改良后的结果。 

接口一般多用于设计上,设计上的特点:(可以理解为主板上提供的接口)
    1.接口是对外提供的规则
    2.接口是功能的扩展
    3.接口的出现降低了耦合性

三:抽象类和接口

  ①语法层面的区别:

    共性:都是不断向上抽取的结果

    区别:

      1:抽象类只能被继承,而且只能单继承。  

       接口需要被实现,而且可以多实现。

      2:抽象类中可以定义非抽象方法,子类可以直接继承使用。

      接口中都是抽象方法,需要子类去实现。

      3:抽象类使用的是 is a 关系。

      接口使用的 like a 关系。

      4:抽象类的成员修饰符可以自定义。

      接口中的成员修饰符是固定的。全都是public的。

  ②设计层面的区别:

    上面从语法特点角度对抽象类和接口进行区别,这些层面是比较低层次的,要想从根本上区别二者,就必须从设计理念上进行分析。

    抽象类是对一种事物的抽象,描述的是这个事物的本质上的内容,而接口是对这个事物的扩展。举个例子来说吧,一个学校的教师有很多,每个教师都会讲课是吧,但是每个教师讲课的内容不一样,所以就把教师这个职业抽象出来,里面有讲课这个抽象方法,教师类就是抽象类。但有些老师不仅会讲课,还会讲相声,但是相声这个行为不是每个老师都会的啊,每个老师讲的相声也不一样啊,这时候就用到了接口,相声扩展了老师的功能,是不是很有意思啊,

    如果读者觉得不恰当,可以去网上搜搜门和警报的例子,很形象的。

向大家推荐这么一篇文章:

    深入理解Java的接口和抽象类:http://www.cnblogs.com/dolphin0520/p/3811437.html

 

  

  

  

 

抽象类和接口

标签:

原文地址:http://www.cnblogs.com/makaruila/p/4828914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!