/**
*
java继承实例。
定义了一个点类point,然后线条类line继承了point类,正方形类square继承line类。
*/
//点类
class PointDemo
{
private int x;
private int y;
private static int pCount=0;
//默认初始化坐标点(0,0),坐标点数计数+1
PointDemo(){
this.x=0;
this.y=0;
pCount++;
}
//带有x,y坐标参数构造函数,坐标点数计数+1
PointDemo(int x, int y){
this.x=x;
this.y=y;
pCount++;
}
//设置坐标x,y值
public void setPoint(int x,int y){
this.x=x;
this.y=y;
}
//返回获取X,Y坐标值
public int getX(){return x;}
public int getY(){return y;}
//返回程序累积坐标计数
public static int getPCount(){return pCount;}
}
//行类继承点类
class LineDemo extends PointDemo
{
private PointDemo po1;
private PointDemo po2;
private float range;
private static int lCount=0;
//返回程序累积线数计数
public static int getLCount(){return lCount;}
//默认空参构造函数,默认坐标(0,0),(4,3),初始化两坐标之间的长度,线数计数+1
LineDemo(){
po1=new PointDemo();
po2=new PointDemo(4,3);
setRange();
lCount++;
}
//两坐标参数构造函数,初始化两坐标和坐标之间的长度,线数计数+1
LineDemo(PointDemo po1,PointDemo po2){
this.po1=po1;
this.po2=po2;
setRange();
lCount++;
}
//返回获取两点坐标值
public PointDemo getPo1(){return po1;}
public PointDemo getPo2(){return po2;}
//设置两点之间的长度
public void setRange(){
range=(float)Math.sqrt(Math.pow(Math.abs(po2.getX()-po1.getX()),2)+Math.pow(Math.abs(po2.getY()-po1.getY()),2));;
}
public float getRange(){return range;}
//输出两点坐标及两点之间的距离
public void out(){
System.out.println("___________________________");
System.out.println("("+po1.getX()+","+po1.getY()+")");
System.out.println("("+po2.getX()+","+po2.getY()+")");
System.out.println("range="+range);
System.out.println("===========================");
}
}
//正方型类
/*
(X1,Y1),(X2,Y2),(X3,Y3),(X4,Y4)
A = X2-X1, B = Y2-Y1;
X3 = X1+(A-B) = X1+(X2-X1-Y2+Y1) = X2-Y2+Y1;
Y3 = Y1+A+B = Y1+X2-X1+Y2-Y1 = X2-X1+Y2;
X4 = -(X2-(A-B)) = -(X2+Y2-Y1-X2+X1) = Y1-X1-Y2;
Y4 = Y2+(A-B) = Y2+X2-X1-Y2+Y1 = X2-X1+Y1;
*/
class Square extends LineDemo
{
private LineDemo[] line = new LineDemo[6];
private PointDemo[] point = new PointDemo[4];
private static int sCount=0;
//返回累积正方形个数计数
public static int getSCount(){return sCount;}
//空参构造函数,默认初始化正方形四个角坐标及边长和周长的长度,正方形个数计数+1
Square(){
super();
setSquarePoint();
setSquareLine();
sCount++;
}
//两坐标点参数构造函数,初始化正方形四个角坐标及边长和周长的长度,正方形个数计数+1
Square(PointDemo po1,PointDemo po2){
super(po1,po2);
point[0]=po1;
point[1]=po2;
setSquarePoint();
setSquareLine();
sCount++;
}
//一条边长做参数的构造函数,初始化正方形四个角坐标及边长和周长的长度,正方形个数计数+1
Square(LineDemo line){
super(line.getPo1(),line.getPo2());
point[0]=line.getPo1();
point[1]=line.getPo2();
setSquarePoint();
setSquareLine();
sCount++;
}
//设置正方形四个角坐标
private void setSquarePoint(){
int x1=point[0].getX();
int y1=point[0].getY();
int x2=point[1].getX();
int y2=point[1].getY();
point[2] = new PointDemo(x2-y2+y1,x2-x1+y2);
point[3] = new PointDemo(y1-x1-y2,x2-x1+y1);
}
//设置正方形所有边长和对角线坐标及长度
private void setSquareLine(){
for (int i=0,k=0;i<point.length ;i++ )
{
for (int j=i+1;j<point.length ;j++,k++ )
{
line[k] =new LineDemo(point[i],point[j]);
}
}
}
//输出所有边长和对角线坐标及长度
public void outAllLine(){
for (LineDemo li : line)
{
li.out();
}
}
//输出正方形四个角坐标
public void outPoint(){
for (int i=0;i<point.length ;i++ )
{
System.out.println("point["+i+"] = ("+point[i].getX()+","+point[i].getY()+")");
}
}
}
class ExtendsDemo
{
public static void main(String[] args)
{
//测试点
PointDemo[] pArr = new PointDemo[10];
for (int i=0,j=10;i<pArr.length ;i++,j-- )
{
pArr[i]=new PointDemo(i,j);
}
for (PointDemo po: pArr )
{
System.out.println("("+po.getX()+","+po.getY()+")");
}
System.out.println("pointCount="+PointDemo.getPCount()+"\n");
//测试线
LineDemo line = new LineDemo();
line.out();
System.out.println("lineCount="+LineDemo.getLCount()+"\n");
LineDemo line1 = new LineDemo(pArr[0],pArr[9]);
line1.out();
System.out.println("lineCount="+LineDemo.getLCount()+"\n");
System.out.println("pointCount="+LineDemo.getPCount()+"\n");
//测试正方形
Square su = new Square(line1);
System.out.println("显示所有坐标");
su.outPoint(); //显示所有坐标
System.out.println("显示所有边坐标及长度");
su.outAllLine(); //显示所有边坐标及长度
System.out.println("SquareCount="+Square.getSCount()+"\n");
}
}