分別編寫兩個類Point2D,Point3D來表示二維空間和三維空間的點,使之滿足下列要求:


(1) Point2D有兩個整型成員變量x, y (分別為二維空間的X,Y方向坐標)Point2D的構造方法要實現對其成員變量x, y的初始化。

(2)Point2D有一個void型成員方法offset(int a, int b),它可以實現Point2D的平移。

(3)Point3DPoint2D的直接子類,它有有三個整型成員變量x,y,z (分別為三維空間的X,Y,Z方向坐標)Point3D有兩個構造方法:Point3D(int x,int y,int z)Point3D(Point2D p,int z),兩者均可實現對Point3D的成員變量x, y,z的初始化。

(4)Point3D有一個void型成員方法offset(int a, int b,int c),該方法可以實現Point3D的平移。

(5)一個測試類中的主函數main()中實例化兩個Point2D的對象p2d1p2d2,打印出它們之間的距離,再實例化兩個Point3D的對象p3d1p3d2,打印出他們之間的距離。

2D與3D既是獨立又是繼承關系.

主要用到:1.數學函數求兩點之間的距離2.super的用法3.類的繼承4.對象作函數參數

以下通過代碼具體分析

 1 import java.lang.Math;
 2 class Point2D{
 3 protected int x,y;        //保護類成員主要用於繼承
 4 Point2D(){
 5 }
 6 Point2D(int x,int y){       //有參構造方法
 7 this.x = x;
 8 this.y = y;
 9 }
10 public int getX(){
11 return x;
12 }
13 public int getY(){        //方便在其他類中使用該類中的私有成員變量
14 return y;
15 }
16 public void offset(int a,int b){      //偏移后的橫縱坐標值
17 this.x += a;
18 this.y += b;
19 }
20 public void show(){        //show橫縱坐標
21 System.out.println("坐標為:["+x+ "," +y +"]");
22 }
23 }
24 class Point3D extends Point2D{  //類的繼承
25 private int z;           //第三點x
26 Point3D(){
27 }
28 Point3D(int x,int y,int z){      //有參構造方法三點分別初始化
29 super(2,3);            //調用父類的有兩個參數的構造方法
30 this.z= z;
31 }
32 public int getZ(){
33 return z;
34 }
35 Point3D(Point2D p,int z){     //有參構造方法,以對象作形參.用p對象調用get方法以初始化繼承的私有成員變量
36 super(p.getX(),p.getY());
37 this.z=z;
38 }
39 public void offset(int a,int b,int c){  //3D的偏移量
40 super.offset(a,b);         //方法同上,調用父類的偏移方法
41 z=z+c;
42 }
43 public void show(){        //show3D坐標值
44 System.out.println("坐標為:["+x+ "," +y + "," + z +"]");
45 }
46 }
47 public class Test3_1 {
48 public static void main(String[] args){
49 Point2D p2d1=new Point2D(2,3);
50 Point2D p2d2=new Point2D(3,4);     //初始化2D兩點p2d1,p2d2
51 double retDistance2D=distance2D(p2d1,p2d2);
52 System.out.println(retDistance2D);    //輸出2D兩點之間距離
53 Point3D p3d1=new Point3D(2,3,4);
54 Point3D p3d2=new Point3D(3,4,5);
55 double retDistance3D=distance3D(p3d1,p3d2);
56 System.out.println(retDistance3D);    //同上面的2D
57 }
58 public static double distance2D(Point2D p2d1,Point2D p2d2){//對象作形參
59 double distance;
60 double distanceX;
61 double distanceY;
62 distanceX=Math.pow((p2d1.getX()-p2d2.getX()),2);//(x1-x2)2=X
63 distanceY=Math.pow((p2d1.getY()-p2d2.getY()),2);//(y1-y2)2=Y
64 distance=Math.sqrt(distanceY+distanceX);//X+Y再開方
65 return distance;
66 
67 }
68 public static double distance3D(Point3D p3d1,Point3D p3d2){//同2D方法一致
69 double distance;
70 double distanceX;
71 double distanceY;
72 double distanceZ;
73 distanceX=Math.pow((p3d1.getX()-p3d2.getX()),2);
74 distanceY=Math.pow((p3d1.getY()-p3d2.getY()),2);
75 distanceZ=Math.pow((p3d1.getZ()-p3d2.getZ()),2);
76 distance=Math.sqrt(distanceY+distanceX+distanceZ);
77 return distance;
78 
79 }
80 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM