标签:
什么是抽象类: 1、声明方法的存在而不去实现它的类被叫做抽象类。 2、抽象类不能被实例化。 3、抽象类中可以有非抽象方法。 4、抽象类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。 继承抽象类:子类必须实现抽象类的所有方法,子类不实现那么子类也必须是抽象类。 继承普通类:共享父类的方法,经常要用到的一些方法写成一个公共类继承就能调用。 使用抽象类好处:假设要编写一个计算矩形、三角形和圆的面积与周长的程序。 可以看到三个类都要计算面积和周长,虽然公式不同但目标相同。 因此可以定义一个抽象的父类,在抽象类里定义圆、三角形和矩形共同的数据成员及成员方法。 把计算面积与周长的成员方法放在父类给予说明,再将具体的计算公式在子类中的实现。 抽象类的作用在于将许多有关的类组织在一起,提供一个公共的类,即抽象类,而那些被它组织在一起的具体的类将作为它的子类由它派生出来。
抽象类刻画了公有行为的特征,并通过继承机制传送给它的派生类。 什么是接口: 1、接口是抽象类的变体。 2、接口中的所有方法都是抽象的,没有一个有程序体。 3、接口只可以定义static final成员变量。 4、多继承问题可以通过接口来实现。 一般类实现接口:必须为接口提供所有方法的实现(接口中的所有方法都是抽象方法) 抽象类实现接口:可以不实现接口的所有方法,可以由它的子类实现
使用接口的好处:
1、简单,有利于庞大项目的行为规范,防止一些开发人员随意定义 2、有利于后期的维护和扩展 3、提高的代码的安全性,是实现软件松耦合的重要手段 主要体现三方面: 1、通过接口可以实现不相关类的相同行为,而不需要了解对象所对应的类。 2、通过接口可以指明多个类需要实现的方法。 3、通过接口可以了解对象的交互界面,而不需了解对象所对应的类。 实现多接口好处:如果两个接口有同样的行为即方法,那么用一个具体方法来实现就行了
1.两者语法层面上的区别 1)抽象类可以提供成员方法的实现细节,而接口中只能存在public abstract 方法; 2)抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final类型的; 3)接口中不能含有静态代码块以及静态方法,而抽象类可以有静态代码块和静态方法; 4)一个类只能继承一个抽象类,而一个类却可以实现多个接口。 2.设计层面上的区别 1)抽象类是对一种事物的抽象,即对类抽象;而接口是对行为的抽象。 抽象类是对整个类整体进行抽象,包括属性、行为, 但是接口却是对类局部(行为)进行抽象。 举个简单的例子,飞机和鸟是不同类的事物,但是它们都有一个共性,就是都会飞。 设计时可以将飞机设计为一个抽象类Airplane,将鸟设计为一个抽象类Bird,但是不能将"飞行" 这个特性也设计为类,因此它只是一个行为特性,并不是对一类事物的抽象描述。 此时可以将"飞行"设计为一个接口Fly,包含方法fly( ),然后Airplane和Bird分别根据自己的需要实现Fly这个接口。 2)设计层面不同,抽象类作为很多子类的父类,它是一种模板式设计。而接口是一种行为规范,它是一种辐射式设计。 什么是模板式设计? 最简单例子,大家都用过ppt里面的模板,如果用模板A设计了ppt B和ppt C,ppt B和ppt C公共的部分就是模板A了,如果它们的公共部分需要改动,则只需要改动模板A就可以了,不需要重新对ppt B和ppt C进行改动。 而辐射式设计,比如某个电梯都装了某种报警器,一旦要更新报警器,就必须全部更新。 也就是说对于抽象类,如果需要添加新的方法,可以直接在抽象类中添加具体的实现,子类可以不进行变更;而对于接口则不行,如果接口进行了变更,则所有实现这个接口的类都必须进行相应的改动。 网上流传最广泛的例子:门和警报的例子:门都有open( )和close( )两个动作 abstract class Door { public abstract void open(); public abstract void close(); } 或者: interface Door { public abstract void open(); public abstract void close(); } 如果我们需要门具有报警alarm( )的功能,那么该如何实现? interface Alram { void alarm(); } abstract class Door { void open(); void close(); } class AlarmDoor extends Door implements Alarm { void open() { //.... } void close() { //.... } void alarm() { //.... } }
标签:
原文地址:http://www.cnblogs.com/zhaojinhui/p/4921302.html