码迷,mamicode.com
首页 > 编程语言 > 详细

Java面向对象笔记7

时间:2015-02-19 16:19:41      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:java   接口   单继承   多继承   抽象类   

抽象类是从多个类中抽象出来的模板,在此基础上如果将这种抽象进行的更彻底,那么就可以提炼出一种更特殊


的“抽象类”------接口,接口里不能包含普通方法,接口里的所有方法都是抽象方法。


我们知道类是一种具体实现体,而接口定义了一种规范,接口定义了某一批类所需要遵守的规范,接口不关心这些


类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类


就可以满足实际需要。可见,就看就是从多个相似类中抽象出来的规范,接口不提供任何实现。接口体现的是规范


和实现分离的设计哲学。


让规范和实现分离正是接口的好处,让软件系统的各组件之间面向接口耦合,是一种松耦合的设计。类似的,软件


系统的各模块之间也应该采用这种面向接口的耦合,从而尽量降低各模块之间的耦合,为系统提供更好的可扩展性


和可维护性。因此,接口定义的是多个类共同的公共行为规范,这些行为是与外部交流的通道,这就意味着接口里


通常是定义一组公用方法。


在定义接口时,使用interface关键字,一个接口可以有多个直接父接口,但接口只能继承接口,不能继承类。常见


的接口定义如下:

public interface Interface extends Interface1,Interface2{
	public static final int COUNT=0;
	public abstract void interface0();
}

由于接口定义的是一种规范,因此接口里不能包含构造器和初始化块定义。接口里可以包含Field(只能是常量)、


方法(只能是抽象实例方法)、内部类(包括内部接口、枚举)定义。


由前面可知,接口里定义的是多个类共同个公共行为规范,因此接口里的所有成员,包括常量、方法、内部类和枚


举都是public访问权限。定义接口成员时,可以省略访问控制修饰符,如果知道访问控制修饰符,则只能使用public


访问控制修饰符。


对于接口里定义的常量Field而言,它们是接口相关的,而且它们只能是常量,因此系统会自动为这些Field增加


static和final两个修饰符。也就是说,在接口中定义Field时,不管是否使用public static final修饰符,接口里的Field总


将使用这三个修饰符来修饰。而且,接口里没有构造器和初始化块,因此接口里定义的Field只能在定义时指定默认


值。


对于接口里定义的方法而言,它们只能是抽象方法,因此系统会自动为其增加abstract修饰符,由于接口里的方法


全部是抽象方法,因此接口里不允许定义静态方法,即不可使用static修饰接口里定义的方法,不管定义接口里方法


时是否使用pulic abstract修饰符,接口里的方法总是使用public abstract来修饰。


在Java中类是不支持多继承的,为了弥补这个,Java提供了接口的多继承,也就是说,接口完全支持多继承,一个


接口可以有多个直接父接口。和类继承相似,子接口扩展某个父接口,将会获得父接口里定义的所有抽象方法,常


量。一个接口继承多个父接口时,像上面的代码,多个父接口排在extends关键字之后,多个父接口之间以英文逗号


隔开。


关于接口和抽象类的相似点如下:


1、接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承。


2、接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法。


但接口和抽象类之间的差别非常大,这种差别主要体现在二者的设计目的上。接口作为系统与外界交互的窗口,接


口体现的是一种规范。对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务(以方法的形式来提


供);对于接口的调用者而言,接口规定了调用者可以调用哪些服务,以及如何调用这些服务(如何来调用方


法)。


抽象类则不一样,抽象类作为系统中多个子类的共同父类,它所体现的是一种模板式设计。抽象类作为多个子类的


抽象父类,可以被当成系统实现过程中的中间产品,这个中间产品已经实现了系统的部分功能(已经提供实现的方


法),但这个产品依然不能当成最终产品,必须更进一步的完善。


因此抽象类和接口存在以下差别:


1、接口里只能包含抽象方法,不包含已经提供实现的方法;抽象类则完全可以包含普通方法。


2、接口里不能定义静态方法;抽象类里可以定义静态方法。


3、接口里只能定义静态常量,不能定义普通的常量;抽象类里则既可以定义普通常量,也可以定义静态常量。


4、接口里不包含构造器;抽象类里可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用


这些构造器来完成属于抽象类的初始化操作。


5、接口里不能包含初始化块;但抽象类则完全可以包含初始化块。


6、一个类最多只能有一个直接父类,包括抽象类;但一个类可以直接实现多个接口,通过实现多个接口可以弥补


Java单继承的不足。




转载请注明出处:http://blog.csdn.net/hai_qing_xu_kong/article/details/43882813     情绪控_ 
















Java面向对象笔记7

标签:java   接口   单继承   多继承   抽象类   

原文地址:http://blog.csdn.net/hai_qing_xu_kong/article/details/43882813

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