Java中的抽象类



Java中的抽象类。

抽象方法:不含方法体的方法,方法体的实现交给该类的子类根据自身的情况去实现

抽象类:包含抽象方法的类
abstract:修饰抽象类和抽象方法
抽象类不能被实例化,不能用new产生对象
抽象方法只需声明,不需实现
含有抽象方法的类必须被声明为抽象类
抽象类的子类必须覆盖所有的抽象方法后才能被实例化,否则这个子类还是抽象类
一个abstract类只关心它的子类是否具有某种功能,并不关心功能的具体行为,功能的具体行为由子类负责实现

例子:

/*
* TextAbstract.java
*
* Created on 2007-10-28, 23:30:28
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package textabstract;

/**
*
* @author Administrator
*/
abstract class 图形
{
public abstract double 求面积();
}
class 圆形 extends 图形
{
private double r;
public 圆形(double r)
{
this.r=r;
}
public double getR()
{
return r;
}
public double 求面积()
{
return (3.14*r*r);
}
}
class 梯形 extends 图形
{
double a,b,h;
public 梯形(double a,double b,double h)
{
this.a=a;
this.b=b;
this.h=h;
}
public double 求面积()
{
double s;
s=(a+b)*h/2;
return s;
}
}
class 锥 extends 图形
{
图形 u;
double h;
public 锥(图形 u,double h)
{
this.u=u;
this.h=h;
}
public double 求面积()
{
double s;
s=u.求面积()*h/3.0;
return s;
}
}
public class TextAbstract {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
图形 tuxing;
tuxing=new 圆形(10);
//圆形 yuanxing=new 圆形(10.0);
//System.out.println(“半径为”+yuanxing.getR()+”的圆的面积是:”+yuanxing.求面积());
System.out.println(“半径为10的圆的面积是:”+tuxing.求面积());
锥 yuanzhui=new 锥(tuxing,10.0);
System.out.println(“以圆为底的锥的面积为:”+yuanzhui.求面积());
tuxing=new 梯形(2.0,5.0,4.0);
System.out.println(“上底为2.0,下底为5.0,高为4.0的梯形的面积是:”+tuxing.求面积());
锥 zhui=new 锥(tuxing,10.0);
System.out.println(“以梯形为底的锥的面积为:”+zhui.求面积());
}

}
/**
* 在上面的例子中,如果直接使用为“图形”创建一个对象“tuxing”时,我们是无法通过这个对象来访问比如说:子类圆形中的getR()的方法
* 但是我们通过创建“tuxing”这一对象可以方便的为其他的子类来实例化,当然我们也可以直接创建子类圆形的对象
*/