abstract修饰符
abstract 修饰符可以用来修饰类和成员方法
用 abstract 修饰的类表示抽象类,抽象类位于继承树的抽象层,抽象类不能被实例化,即不允许创建抽象类本身的实例。没有用abstract 修饰的类称为具体类,具体类可以被实例化。
用 abstract 修饰的方法表示抽象方法,抽象方法没有方法体。抽象方法用来描述系统具有什么功能,但不提供具体的实现。没有用abstract 修饰的方法称为具体方法,具体方法具有方法体。
abstract 语法规则:
抽象类可以没有抽象方法,但包括了抽象方法的类必须被定义为抽象类。如果子类没有实现父类中所有的抽象方法,那么子类也必须被定义为抽象类。
以下一个父类
package test;
//抽象类
abstract classShape{
//受保护的属性
protected doublelength;
protecteddouble width;
//构造方法
Shape(double num1,doublenum2){
this.length = num1;
this.width = num2;
}
//定义了一个抽象方法,方法体为空,只要有类继承就必须实现这个抽象方法,否则子类也必须声明为抽象类
abstract doublearea();
}
其中一个抽象方法 abstract double area();
现有一子类去实现这个父类,会出现什么情况?
package test;
//子类继承父类
class Square extendsShape{
Square(double num1,doublenum2){
super(num1,num2);
}
}
ERROR!!!
父类有一抽象方法 abstract double area();
子类必须去实现,否则本身也只能为抽象类。
所以,要么:
package test;
//子类继承父类
class Square extendsShape{
Square(double num1,doublenum2){
super(num1,num2);
}
//实现抽象方法
double area(){
System.out.println("正方形的面积为:");
returnlength*width;
}
}
要么:
package test;
//子类继承父类
abstract class Square extendsShape{
Square(double num1,doublenum2){
super(num1,num2);