从另一个类(java)访问数据?

从另一个类(java)访问数据?,java,class,public,Java,Class,Public,我创建了一个“父”类(不确定这是否是正确的术语),它表示三维空间中的一个点,如下所示: public class Point3d { private double xCoord; private double yCoord; private double zCoord; public Point3d(double x,double y, double z ){ xCoord = x; yCoord = y; z

我创建了一个“父”类(不确定这是否是正确的术语),它表示三维空间中的一个点,如下所示:

public class Point3d {

    private double xCoord;
    private double yCoord;
    private double zCoord;


    public Point3d(double x,double y, double z ){
        xCoord = x;
        yCoord = y;
        zCoord = z;
    }

    public Point3d() {
        this (0,0,0);
    }


    public double getxCoord() {
        return xCoord;
    }


    public double getyCoord() {
        return yCoord;
    }



    public double getzCoord() {
        return zCoord;
    }

    public void setX(double val){
        xCoord= val;

    }
    public void setY(double val){
        yCoord= val;
    }
    public void setZ(double val){
        zCoord= val;
    }

}
我有两个类定义了两个不同的点(x,y,z) 头等舱:

package threedimpoint;

public class FirstPoint {

    public static void main(String[] args) {

        Point3d frst = new Point3d();

        frst.setX(0);
        frst.setY(0);
        frst.setZ(0);

        System.out.println("(" + frst.getxCoord() + "," + frst.getyCoord() + "," + frst.getzCoord() + ")");



    }

}
二等舱

package threedimpoint;

public class Secondpoint {

    public static void main(String[] args) {

        Point3d secnd = new Point3d();

        secnd.setX(2);
        secnd.setY(12);
        secnd.setZ(24);

        System.out.println("(" + secnd.getxCoord() + "," + secnd.getyCoord() + "," + secnd.getzCoord() + ")");

    }

}
现在我想创建一个新类,它接受的信息是x,y,z坐标 从一等舱(公共舱第一点)到二等舱(公共舱第二点)

然后用它来计算两点之间的距离


如何在新类中访问该信息?

公共静态void main不属于您定义的类,它是java程序的第一个执行点。如果需要访问两个Point3d类,可以在main方法中执行以下操作

    public static void main(String[] args) {

       Point3d frst = new Point3d();

       frst.setX(0);
       frst.setY(0);
       frst.setZ(0);

       System.out.println("(" + frst.getxCoord() + "," + frst.getyCoord() + "," + frst.getzCoord() + ")");


       Point3d secnd = new Point3d();

       secnd.setX(2);
       secnd.setY(12);
       secnd.setZ(24);

       System.out.println("(" + secnd.getxCoord() + "," + secnd.getyCoord() + "," + secnd.getzCoord() + ")");

   }

publicstaticvoidmain不属于您定义的类,它是java程序的第一个执行点。如果需要访问两个Point3d类,可以在main方法中执行以下操作

    public static void main(String[] args) {

       Point3d frst = new Point3d();

       frst.setX(0);
       frst.setY(0);
       frst.setZ(0);

       System.out.println("(" + frst.getxCoord() + "," + frst.getyCoord() + "," + frst.getzCoord() + ")");


       Point3d secnd = new Point3d();

       secnd.setX(2);
       secnd.setY(12);
       secnd.setZ(24);

       System.out.println("(" + secnd.getxCoord() + "," + secnd.getyCoord() + "," + secnd.getzCoord() + ")");

   }
这两个非点“类”只不过是静态主方法的存储库,而这些野兽无法真正以任何有意义的方式组合在一起。如果您想要任何有意义的信息和数据共享,那么这些类应该是真正的OOP兼容类,带有字段,比如haivng Point3D字段,根据需要包含getter和setter方法,以及所需的构造函数和方法

e、 g

也许

public class PointCollection {
   private List<Point3d> points = new ArrayList<>();

   public void add(Point3d p) {
      points.add(p);
   }

   // ..... methods to get, to iterate through,...
}
公共类点集合{
私有列表点=新的ArrayList();
公共空白添加(点3D p){
增加(p);
}
//…获取的方法,迭代的方法,。。。
}
您的两个非点“类”只不过是静态主方法的存储库,而这些野兽无法真正以任何有意义的方式组合在一起。如果您想要任何有意义的信息和数据共享,那么这些类应该是真正的OOP兼容类,带有字段,比如haivng Point3D字段,根据需要包含getter和setter方法,以及所需的构造函数和方法

e、 g

也许

public class PointCollection {
   private List<Point3d> points = new ArrayList<>();

   public void add(Point3d p) {
      points.add(p);
   }

   // ..... methods to get, to iterate through,...
}
公共类点集合{
私有列表点=新的ArrayList();
公共空白添加(点3D p){
增加(p);
}
//…获取的方法,迭代的方法,。。。
}

不能有多个主类。你是说这样的事吗

package threedimpoint;

public class testPoint {

    public static void main(String[] args) {
        Point3d frst = new Point3d();

        frst.setX(0);
        frst.setY(0);
        frst.setZ(0);

        Point3d secnd = new Point3d();

        secnd.setX(2);
        secnd.setY(12);
        secnd.setZ(24);

        int x = frst.getxCoord() + secnd.getxCoord()
        int y = frst.getyCoord() + secnd.getyCoord()
        int z = frst.getzCoord() + secnd.getzCoord()

        System.out.println("(" + x + "," + y + "," + z + ")");
    }

}

不能有多个主类。你是说这样的事吗

package threedimpoint;

public class testPoint {

    public static void main(String[] args) {
        Point3d frst = new Point3d();

        frst.setX(0);
        frst.setY(0);
        frst.setZ(0);

        Point3d secnd = new Point3d();

        secnd.setX(2);
        secnd.setY(12);
        secnd.setZ(24);

        int x = frst.getxCoord() + secnd.getxCoord()
        int y = frst.getyCoord() + secnd.getyCoord()
        int z = frst.getzCoord() + secnd.getzCoord()

        System.out.println("(" + x + "," + y + "," + z + ")");
    }

}

您的
FirstPoint
SecondPoint
类实际上根本不需要存在。它们只是
Point3D
的对象实例。距离计算可以是
Point3D
类中的一种方法

因此:

还要注意
toString
实现为点和
ORIGIN
常量提供格式化输出


与包含成员变量的“setter”方法相比,这种方法的一个(巨大)优势是
Point3D
是不可变的。这意味着任何传递了
Point3D
对象引用的方法都可以依赖于它,而这个值永远不会改变,这使得它们的使用更加简单。理想情况下,您也不应该有“getter”-您可能需要获取单个坐标的所有内容都应该是
Point3D
中的一个方法。但是,这在所有情况下都是不可能的。

您的
FirstPoint
SecondPoint
类实际上根本不需要存在。它们只是
Point3D
的对象实例。距离计算可以是
Point3D
类中的一种方法

因此:

还要注意
toString
实现为点和
ORIGIN
常量提供格式化输出


与包含成员变量的“setter”方法相比,这种方法的一个(巨大)优势是
Point3D
是不可变的。这意味着任何传递了
Point3D
对象引用的方法都可以依赖于它,而这个值永远不会改变,这使得它们的使用更加简单。理想情况下,您也不应该有“getter”-您可能需要获取单个坐标的所有内容都应该是
Point3D
中的一个方法。但是,这在所有情况下都是不可能的。

您不需要每次实例化对象时都创建一个新类。此外,您只需要将
publicstaticvoidmain()
作为程序的入口点。这是执行开始的地方,但并不意味着每个类都需要一个

此外,以下是构建
Point3d
类的正确方法

public class Point3d {
    private double xCoord, yCoord, zCoord;
    public Point3D(double x, double y, double z) {
        this.xCoord = x;
        this.yCoord = y;
        this.zCoord = z;
    }
    public double getX(){return this.xCoord;}
    public double getY(){return this.yCoord;}
    public double getZ(){return this.zCoord;}

    public void setX(x){this.xCoord = x;}
    public void setY(y){this.yCoord = y;}
    public void setZ(z){this.zCoord = z;}
}

public class FirstPoint {
    public static void main(String[] args) {
        Point3d frst = new Point3d();

        frst.setX(0);
        frst.setY(0);
        frst.setZ(0);

        Point3d secnd = new Point3d();

        secnd.setX(2);
        secnd.setY(12);
        secnd.setZ(24);

        double distance = euclidean_distance(frst,secnd);
    }
    public double euclidean_distance(Point3d a, Point3d b){
        return Math.sqrt((a.getX()-b.getX())*(a.getX()-b.getX()) + (a.getY()-b.getY())*(a.getY()-b.getY()) + (a.getZ()-b.getZ())*(a.getZ()-b.getZ()));
    }
}

不需要每次实例化对象时都创建一个新类。此外,您只需要将
publicstaticvoidmain()
作为程序的入口点。这是执行开始的地方,但并不意味着每个类都需要一个

此外,以下是构建
Point3d
类的正确方法

public class Point3d {
    private double xCoord, yCoord, zCoord;
    public Point3D(double x, double y, double z) {
        this.xCoord = x;
        this.yCoord = y;
        this.zCoord = z;
    }
    public double getX(){return this.xCoord;}
    public double getY(){return this.yCoord;}
    public double getZ(){return this.zCoord;}

    public void setX(x){this.xCoord = x;}
    public void setY(y){this.yCoord = y;}
    public void setZ(z){this.zCoord = z;}
}

public class FirstPoint {
    public static void main(String[] args) {
        Point3d frst = new Point3d();

        frst.setX(0);
        frst.setY(0);
        frst.setZ(0);

        Point3d secnd = new Point3d();

        secnd.setX(2);
        secnd.setY(12);
        secnd.setZ(24);

        double distance = euclidean_distance(frst,secnd);
    }
    public double euclidean_distance(Point3d a, Point3d b){
        return Math.sqrt((a.getX()-b.getX())*(a.getX()-b.getX()) + (a.getY()-b.getY())*(a.getY()-b.getY()) + (a.getZ()-b.getZ())*(a.getZ()-b.getZ()));
    }
}

如果要计算两点之间的距离,可以在Point3d类中创建函数。例如:

public class Point3d {

    private double xCoord;
    private double yCoord;
    private double zCoord;


    public Point3d(double x,double y, double z ){
        xCoord = x;
        yCoord = y;
        zCoord = z;
    }

    public double calucateDistance(Point3d compareObj)
    { 
        // ......
    }
    //......
}
然后您只需要创建一个测试类,在测试类中您可以创建Point3d的两个实例,例如:

public class Test{

   public static void main(String[] args) {

      Point3d first = new Point3d();        
      first .setX(0);

      first .setY(0);

      first .setZ(0); 

      Point3d second = new Point3d(); 

      second.setX(2);

      second.setY(12);

      second.setZ(24);

      double result = first.calucateDistance(second); 

   }
 }

如果要计算两点之间的距离,可以在Point3d类中创建函数。例如:

public class Point3d {

    private double xCoord;
    private double yCoord;
    private double zCoord;


    public Point3d(double x,double y, double z ){
        xCoord = x;
        yCoord = y;
        zCoord = z;
    }

    public double calucateDistance(Point3d compareObj)
    { 
        // ......
    }
    //......
}
然后您只需要创建一个测试类,在测试类中您可以创建Point3d的两个实例,例如:

public class Test{

   public static void main(String[] args) {

      Point3d first = new Point3d();        
      first .setX(0);

      first .setY(0);

      first .setZ(0); 

      Point3d second = new Point3d(); 

      second.setX(2);

      second.setY(12);

      second.setZ(24);

      double result = first.calucateDistance(second); 

   }
 }

我不能同意你的说法。您可以有任意数量的具有main方法的类。但是一次只能执行一个。但是,你不能期望同时运行这两个程序来将点值相加。我不能同意你的说法。您可以有任意数量的具有main方法的类。但是一次只能执行一个。但是,您不能期望同时运行这两个来将点值相加。好的,我明白您的意思,现在我将尝试一下。谢谢。好的,我明白你的意思,我现在就试试。谢谢