任务1、封装一个矩形类:属性为长和宽,方法为计算面积
class Rectangle{
int length;
int width;
Rectangle(int len,int wid){
length=len;
width=wid;
}
double calArea(){
return length*width;
}
}
任务2、封装一个圆类:属性为半径,方法为计算面积
class Cicle{
double radius;
Cicle(double r){radius=r;}
double area(){
returnMath.PI*radius*radius;
}
}
任务3:抽取上述两个类的共同行为:计算面积à封装成形状Shape类
class Shape{
doublearea(){ return 0; }
}
以Shape作为父类,派生长方形类和圆类,并在子类中对计算面积方法进行覆盖。
classRectangle extends Shape{
double calArea(){
return length*width;
}
}
class Cicle extends Shape{
double area(){
returnMath.PI*radius*radius;
}
}
问题:Shape类中,因没有具体指定几何形状的类型,计算面积方法功能的具体实现过程未知!!!
即方法的方法体的实现是不知道的,所以在写代码时,不写方法的具体实现过程,只描述方法声明部分内容,这种没有方法体的方法称为抽象方法。
包含抽象方法的类称为抽象类。其关键词为abstract。
则修改Shape类的定义如下:
abstract classShape{
abstract double area();
}
结论:
(1)抽象方法:没有方法体,只有方法的原型声明,是没实现的方法,记为抽象方法。
(2)抽象类:在定义父类时,只知道父类具有一个方法(功能),但父类不作为方法执行体,方法的执行体是父类派生的子类对象。这是就可以在父类中只定义该功能方法,而不具体定义其实现过程。
该父类包含了一个抽象方法,包含抽象方法的类称为抽象类。
关键词:abstract
(3)抽象类作用:派生子类,并规定子类必须去实现的一些功能。
(4)抽象类规则:
当子类仅部分实现了抽象父类的抽象方法,或者说子类还包含有未实现的抽象方法,则子类也是抽象类
抽象类不可以实例化对象,即new抽象类名();
抽象类的应用
任务4:封装一个类,完成功能:计算一段代码的运行时间
用抽象父类完成获取运行代码时间功能,具体的运行代码由派生类提供,父类定义如下:
abstract classGetTime{
final long getTime(){
long start=System.currentTimeMillis();
//.....
runCode();
longend=System.currentTimeMillis();
return end-start;
}
abstract voidrunCode(); //运行的代码由子类完成
}
子类仅提供运行的具体代码功能,其定义:
class RunCodeextends GetTime{
void runCode(){
for(int i=0;i<1000;i++){
System.out.println();
}
}
}
测试类:
public classTest {
public static void main(String[] args) {
RunCode rc=new RunCode();
rc.getTime();
}
}
2062

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



