抽象类试验。定义一组具有继承关系的类。Shape(形状)类是一个抽象类,包含4个数据成员(坐标x,y,颜色c,图形对象g(Graphics类对象)),一个构造方法和两个抽象方法(求面积area()和draw方法)。Triangle(三角形)由Shape派生,Rectangle(矩形)由Square派生,Oval(圆类)由Shape派生。
对上述类进行测试。
请尝试按照利用坐标和颜色使用图形对象的方法进行图形对象的绘制和面积输出。
package src1;
import java.awt.*;
import java.applet.Applet;
abstract class shape{
public int x,y;
public Color c;
public abstract double area();
public abstract void draw(Graphics g);
}
class Square extends shape{
int l,x,y;
public Square(){ //必须写,子类Rectangle需调用
}
public Square(int l,int x,int y){ //若对正方形进行操作,数据会进入此处
this.l=l;
this.x=x;
this.y=y;
}
public double area(){
return l*l;
}
public void draw(Graphics g){
g.setColor(Color.red);
g.drawRect(x, y, l, l);
g.setColor(Color.yellow);
g.fillRect(x, y, l, l);
g.drawString(" "+area(), x, y);
}
}
class Rectangle extends Square{
int width,height,x,y;
public Rectangle(int w,int h,int x,int y){
width=w;
height=h;
this.x=x;
this.y=y;
}
public double area(){
return height*width;
}
public void draw(Graphics g){
g.setColor(Color.red);
g.drawRect(x, y, width, height);
g.setColor(Color.green);
g.fillRect(x, y, width, height);
g.drawString(" "+area(), x, y);
}
}
class Triangle extends shape{
Point p1=new Point();
Point p2=new Point();
Point p3=new Point();
double side1,side2,side3;
public Triangle(int x1,int y1,int x2,int y2,int x3,int y3){
p1.x=x1;
p1.y=y1;
p2.x=x2;
p2.y=y2;
p3.x=x3;
p3.y=y3;
side1=p1.distance(p2);
side2=p1.distance(p3);
side3=p3.distance(p2);
}
public double area(){
double t=side1+side2+side3;
return Math.sqrt(t*(t-side1)*(t-side2)*(t-side3));
}
public void draw(Graphics g){
int px[]={p1.x,p2.x,p3.x,p1.x};
int py[]={p1.y,p2.y,p3.y,p1.y};
g.setColor(Color.pink);
g.fillPolygon(px,py,4 );
g.drawString(" "+area(), p1.x, p1.y);
}
}
class Oval extends shape{
public int x,y;
double r;
public Oval(double r,int x,int y){
this.x=x;
this.y=y;
this.r=r;
}
public double area(){
return Math.PI*r*r;
}
public void draw(Graphics g){
g.setColor(Color.gray);
g.drawOval(x, y, (int)r, (int)r);
g.setColor(Color.blue);
g.fillOval(x, y, (int)r, (int)r);
g.drawString(" "+area(), x, y);
}
}
@SuppressWarnings("serial")
public class 图形 extends Applet{
public void paint(Graphics g){
Square s1=new Square(50,250,200);
System.out.println("正方形面积为:"+s1.area());
s1.draw(g);
Rectangle r1=new Rectangle(30,50,50,50);
r1.draw(g);
System.out.println("长方形面积为:"+r1.area());
Oval o1=new Oval(50,150,80);
System.out.println("圆形面积为:"+o1.area());
o1.draw(g);
Triangle t1=new Triangle(80,150,190,250,210,180);
System.out.println("三角形面积为:"+t1.area());
t1.draw(g);
}
}
结果如下: