------- <a href="http://www.itheima.com" target="blank">android培训</a>、<a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------
抽象类体现数据抽象的思想,是实现程序多态性的一种手段。接口则是Java中实现多重继承的唯一途径。
一、抽象类:
抽象类的作用在于将许多有关的类组织在一起,提供一个公共的类,即抽象类,而那些被它组织在一起的具体的类做为它的子类由它派生出来。定义一个抽象类的关键字是abstract,格式如下:
abstract class abstractClass{ /* 类定义体 */ }
抽象方法是指在返回值类型前加上abstract关键字,且没有方法体。格式如下:
abstract<返回值类型><抽象方法名>([<形式参数列表>]);
注意:所谓没有方法体,即连{...}也没有。
对于抽象类与抽象方法的限制:
(1) 用abstract 修饰符修饰的类被称为抽象类。用abstract 修饰符修饰的成员方法被称为抽象方法;
(2) 抽象类中可以有零个或多个抽象方法,也可以包含非抽象的方法;
(3) 抽象类中可以没有抽象方法,但是,有抽象方法的类必须是抽象类;
(4) 对于抽象方法来说,在抽象类中只指定其方法名及其类型,而不书写其实现代码;
(5) 抽象类可以派生子类,在抽象类派生的子类中必须实现抽象类中定义的所有抽象方法;
(6) 抽象类不能使用new运算符创建对象,但仍可在抽象类中定义构造方法,可由派生类的构造方法调用;
(7) final不能修饰抽象类;
(8) private、static、final或native修饰抽象方法;
(9) abstract 类中不能有private的数据成员或成员方法;
(10) 父类是非抽象类(即具体类),则其子类仍可是抽象类;
(11) 虽然不能创建抽象类的对象,但抽象类可以当作数据类型使用,如作为方法形参类型、返回值类型、数组元素类型等等。
二、接口
接口就是方法定义和常量值的集合。从本质上讲,接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现。
接口可以实现“多重继承”,且一个类可实现多个接口,正是这些机制使得接口提供了比多重继承更简单,更灵活,而且更强健的功能。
声明接口:
[修饰符] interface 接口名[extends 父接口名列表] {
常量数据成员声明;
抽象方法声明;
}
接口的声明注意一下几点:
(1) interface:声明接口的关键字,可将接口看成一个特殊类;
(2) 接口名要符合Java标识符命名规则;
(3) 修饰符有两种:
public 和默认。public修饰的接口是公共接口,可以被所有的类和接口使用;
默认修饰符的接口只能被同一个包中的其它类和接口使用;
(4) 父接口列表:接口也具有继承性。它将继承父接口的所有属性和方法。与类的继承不同一个接口可以有一个以上的父接口,它们之间用逗号分隔;
(5) 常量数据成员声明:常量数据成员前可以有也可省略修饰符。
修饰符是public static 和 final;接口中的数据成员都是用 final修饰的常量,写法如下:
修饰符 数据成员类型 数据成员名=常量值
或
数据成员名 = 常量值
例:
public final static double PI=3.14159; // 等价于double PI=3.14159;
int SUM=100; // 等价于final static int SUM=100;
(6) 接口中没有自身的构造方法,所有成员方法都是抽象方法;在接口中只能给出这些抽象方法的方法名、返回值和参数列表,而不能定义方法体,即仅仅规定了一组信息交换、传输和处理的“接口”。格式如下:
返回值类型 方法名(参数列表);
接口的实现:
接口定义仅仅是实现某一特定功能的一组功能的对外接口和规范,而不能真正地实现这个功能,这个功能的真正实现是在“继承”这个接口的各个类中完成的,要由这些类来具体定义接口中各抽象方法的方法体。
一个类只能继承一个父类,但是可实现多个接口。
类定义的完整格式如下:
[<修饰符>] class <类名>[extends<父类名>] [implements<接口名1>,<接口名2>,……]{
// 类定义体
}
在类中,用implements关键字就可以调用接口。一个类可以调用多个接口,这时,在implements后用逗号隔开多个接口的名字;如果实现某接口的类不是抽象类,则在类的定义体部分必须实现指定接口的所有抽象方法,即为所有抽象方法定义方法体,而且方法头部分应该与接口中的定义完全一致,即有完全相同的返回值和参数列表;如果实现某接口的类是抽象类,则它可以不实现该接口所有的方法;接口的抽象方法的访问限制符都己指定为public,所以类在实现方法时,必须显式地使用public修饰符,否则编译系统警告为缩小了接口中定义的方法的访问控制范围。
接口和抽象类的区别:
Java中所有的类有共同的父类java.lang.Object,但接口没有共同的根。接口可以当作抽象类使用。它们的区别如下:
(1)接口中的每个方法,没有实现部分,都是抽象方法;抽象类中可以有具体的方法。
(2)接口中的数据必须是常量;抽象类可以有各种类型的数据。
(3)由于定义在接口中的所有方法都是抽象方法,接口中可以省略abstract修饰符;但是抽象类中的抽象方法必须用abstract修饰。
179

被折叠的 条评论
为什么被折叠?



