黑马程序员技术交流社区

标题: 抽象类、接口、类他们之间的区别和联系? [打印本页]

作者: 职业规划-蔡红微老师    时间: 2012-4-9 12:45
标题: 抽象类、接口、类他们之间的区别和联系?
抽象类、接口、类他们之间的区别和联系?
作者: 张云静    时间: 2012-4-9 14:03
类就是最具体的实现,类定义了数据类型的数据和行为。
抽象类是声明方法的存在而不去实现它的类;抽象类与接口紧密相关,它们不能示例化,并且常常部分实现或根本不实现。
抽象类:
1) 抽象方法,只有行为的概念,没有具体的行为实现。
使用:abstract 关键字修饰,并且没有方法体。
2) 包含抽象方法的类,就一定是抽象类。
使用: abstract 关键字修饰,包含抽象方法。
3) 抽象类不能直接创建实例。可以定义引用变量。
4) 抽象类只能被继承,一个具体类继承一个抽象类,必须实现所有抽象方法。  
5) 抽象方法和抽象类非常适合作为系统的分析和设计的工具。
接口:
1 接口:全部的方法都是抽象方法,全部的属性都是常量。
接口用来表示纯抽象概念,没有任何具体的方法和属性。
2 不能实例化,可以定义变量。
3 接口变量可以引用具体实现类的实例。
4 接口只能被实现(继承),一个具体类实现接口,必须使用全部的抽象方法。
5 接口之间可以继承。
6 一个具体类可以实现多个接口,实现多继承现象,表示:
7 接口中的属性,默认是常量 public static final
8 接中的方法一定是:public abstract
9 实现一个接口,使用关键字implements, 实现实际上是一种继承关系。接口和实现类是父子类型的关系
作者: 霍世勇    时间: 2012-4-9 14:06
接口就是一组协议。也可以把它理解为特殊的抽象类。实现了接口的类必须去实现接口中定义的所有方法.
抽象类,就是要让实体类去继承它,抽象类中可以有抽象方法,也可以没有抽象方法,但是有抽象方法的类就必须被定义为抽象类.抽象类中的方法可以被子类有选择的去实现.
至于类嘛,就是最具体的实现.
作者: 黄雄斌    时间: 2012-4-9 14:15
还有一个叫派生类,那么抽象类、接口、派生类三者之间的区别如下:

首先,抽象类和接口都包含可以由派生类继承的成员。接口和抽象类都不能直接实例化,但可以声明它们的变量,然后利用多态性把继承这两种类型的对象指定给它们的变量,最后通过这些变量来访问它们的成员,但是不能直接访问派生对象的其他成员。

      派生类只能继承一个基类,即只能直接继承一个抽象类,但可以使用一个继承链来包含多个抽象类,而类可以使用任意多个接口。抽象类可以拥有抽象成员(没有代码体,必须在派生类中实现)和非抽象成员(拥有代码体,也可以是虚拟的,以便在派生类中重写),而接口成员则必须在使用接口的类上实现。另外,接口的成员都是公共的,但抽象类的成员则可以是私有的、内部的、受保护的内部成员等。此外,接口不能包含字段、构造函数、析构函数、静态成员或常量。

      例如有一个火车类Train,其成员用于定义火车车轮的规格和引擎的类型,如蒸汽发动机或电力发电机等,但这个类是抽象的,因为并没有指定某个具体的火车。为了创建一个具体火车,需要为火车添加特性,为此,对类Train进行派生,派生出PassengerTrain、FreightTrain、424DoubleBogey等类。这些派生类拥有火车的一系列相同特性,关于它们具体的车辆型号和发动机型,在派生类中具体设置。此外,它们还各自拥有一些自己的特征,如PassengerTrain用于运送乘客,拥有IPassengerCarrier接口,而FreightTrain和424DoubleBogey用于运送货物,拥有IHeavyLoadCarrier接口,使用接口可增强程序的可扩展性和可维护性。

作者: pray    时间: 2014-4-26 07:52
留个脚印```````




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2