abstract class PlaneGraphics //平面类,抽象类
{
private String shape; //形状
//构造方法,有参数
public PlaneGraphics(String shape)
{
this.shape=shape;
}
//无参数,构造方法
public PlaneGraphics()
{
this("未知图形");
}
//抽象方法
public abstract double area();
//非抽象方法,显示面积
public void print()
{
System.out.println(this.shape+"面积为:"+this.area());
}
}
//长方形类,继承平面类
class Rectangle extends PlaneGraphics
{
protected double length; //长
protected double width; //宽
//有参数的构造方法
public Rectangle(double length,double width)
{
this.length=length;
this.width=width;
}
//正方形构造方法
public Rectangle(double width)
{
super("正方形");
this.width=width;
this.length=width;
}
//无参数构造方法
public Rectangle()
{
}
//计算长方形的构造方法,实现父类的抽象方法
public double area()
{
return width*length;
}
}
//设计椭圆类,继承平面类
class Eclipse extends PlaneGraphics
{
protected double radius_a; //a轴半径
protected double radius_b;
//构造方法
public Eclipse(double radius_a,double radius_b)
{
this.radius_a=radius_a;
this.radius_b=radius_b;
}
//圆的构造方法
public Eclipse(double radius_a)
{
super("圆形:");
this.radius_a=radius_a;
this.radius_b=radius_a;
}
//无参数构造方法
public Eclipse()
{
}
//计算椭圆的面积
public double area()
{
return Math.PI*radius_a*radius_b;
}
}
public class PlaneGraphics_ex {
public static void main(String[]args)
{
PlaneGraphics g=new Rectangle(10,20);
g.print();
g=new Rectangle(10); //正方形
g.print();
g=new Rectangle(); //未知图形方法
g.print();
g=new Eclipse(10,20); //椭圆
g.print();
g=new Eclipse(10); //圆
g.print();
g=new Eclipse(); //圆形形状未知
g.print();
}
}
1.抽象类中只包括抽象方法,方法的声明。而方法的具体的实现是由其子类实现的。
2.抽象类不能实例化,不能基于抽象类来创建新的对象。
3.抽象类中可以包含成员变量和成员方法,但是抽象方法只能出现抽象类,不能出现在其他的类中。