概念:
当定义一个类时,常常需要定义一些成员方法来描述类的行为特征,但有时这些方法的实现方式是无法确定的。
例如,前面在定义 Animal 类时,walk()方法用于描述动物的行走行为,但是针对不同的动物,其行走行为是不同的,因此在 walk()方法中无法准确描述动物的行走行为。
针对上面描述的情况,Java 提供了抽象方法。
格式:
抽象方法是使用 abstract 关键字修饰的成员方法,其在定义时只给出方法名,不需要实现方法体。抽象方法的定义格式如下:
abstract void 方法名称(参数);
当一个类包含了抽象方法,该类必须是抽象类。抽象类和抽象方法一样,必须使用abstract 关键字进行修饰。抽象类的定义格式如下:
abstract class 抽象类名称 {
访问权限 返回值类型 方法名称(参数){ //普通方法,有方法体的实现
return[返回值];
}
访问权限 abstract 返回值类型 抽象方法名称(参数);//抽象方法,无方法体的实现
}
抽象类规则:
- 包含一个以上抽象方法的类必须是抽象类
- 抽象类和抽象方法都需要使用abstract 关键字
- 抽象方法只需要声明而不需要实现
- 如果一个类继承了抽象类,那么该子类必须实现抽象类中的全部抽象方法
实例:
- 创建一个“shape”抽象类,该抽象类包含表示形状的string类型的成员变量namey,和两个抽象方法,分别为求形状周长的抽象方法perimeter0,求形状面积的抽象方法area()
- 创建两个类,一个为正方形类“Square”,正方形类有一各成员变量:doublelength,一个为圆类Cirde”,圆类有一各成员变量:double radius,要求继承上面的抽象类“shape”,并实现“shape”中的两个抽象方法
package 类;
abstract class shape {
String name;
abstract void perimater();
abstract void area();
public static void main (String[]args) {
Square s = new Square();
s.length = 1;
s.perimater();
s.area();
Circle x = new Circle();
x.radius = 1;
x.perimater();
x.area();
}
}
class Square extends shape{
double length;
void perimater() {
System.out.println(""+4*length);
}
void area() {
System.out.println(""+length*length);
}
}
class Circle extends shape{
double radius;
void perimater() {
System.out.println(""+3.14*2*radius);
}
void area() {
System.out.println(""+3.14*radius*radius);
}
}
代码分析: