Inheritance Java子类的多个实例未创建基类的实例

Inheritance Java子类的多个实例未创建基类的实例,inheritance,Inheritance,我正在尝试编写一个地图导航应用程序。它应该以txt数据文件作为输入,将其转换为列表并相应地显示。我面临的问题是,我创建了一个名为Distance的基类和一个扩展了Distance的childclass,分别称为location。在distance类中有一个point变量(我制作的另一个类),它记录位置本身的坐标。“距离”还有一种方法,用于计算当前位置与参数中传递给它的点之间的距离。现在的问题是,在创建多个类位置实例之后,类距离在点变量中只记录了1组值,就好像类距离只实例化了一次 我附上代码: p

我正在尝试编写一个地图导航应用程序。它应该以txt数据文件作为输入,将其转换为列表并相应地显示。我面临的问题是,我创建了一个名为Distance的基类和一个扩展了Distance的childclass,分别称为location。在distance类中有一个point变量(我制作的另一个类),它记录位置本身的坐标。“距离”还有一种方法,用于计算当前位置与参数中传递给它的点之间的距离。现在的问题是,在创建多个类位置实例之后,类距离在点变量中只记录了1组值,就好像类距离只实例化了一次

我附上代码:

public class Distance {
private static Point point1;
private static Point point2;

Distance(Point coords){
    point1=coords;
    System.out.println("cons 1 long: "+point1.longitude);
    System.out.println("cons 1 lat: "+point1.latitude);
}

public  double calcDistance(Point coords2){
    point2=coords2;
    double theta;

    System.out.println("point 1 long: "+point1.longitude);
    System.out.println("point 2 long: "+point2.longitude);

    if(Double.compare(point1.longitude,point2.longitude)>0){
     theta = point1.longitude - point2.longitude;
     System.out.println(point1.longitude+"-"+point2.longitude);
    }else{
        theta = point2.longitude - point1.longitude;
        System.out.println(point2.longitude+"-"+point1.longitude);
    }
    System.out.println(theta);

    double dist = Math.sin(deg2rad(point1.latitude)) 
                * Math.sin(deg2rad(point2.latitude)) 
                + Math.cos(deg2rad(point1.latitude)) 
                * Math.cos(deg2rad(point2.latitude)) 
                * Math.cos(deg2rad(theta));
    System.out.println(dist);

      dist = Math.acos(dist);
      System.out.println(dist);
      dist = rad2deg(dist);
      System.out.println(dist);
      dist = dist * 60 * 1.1515;
      System.out.println(dist);
      dist = dist * 1.609344;
      System.out.println(dist);
    dist = (double) Math.round(dist * 100.0) / 100.0;
    System.out.println(dist);
    return dist;

}

private static double deg2rad(double deg) {
      return (deg * Math.PI / 180.0);
    }
private static double rad2deg(double rad) {
      return (rad * 180 / Math.PI);
    }
}

顺便说一句,这个配方很好用

这是location类:

import java.util.List;
public class Location extends Distance{

public  String name;
public Point coord;
public  List<String> connections;

Location(String nam, Point coords, List<String> connect){
    super(coords);
    name=nam;
    coord=coords;
    connections=connect;

}
import java.util.List;
公共类位置扩展了距离{
公共字符串名称;
公共点合作;
公共列表连接;
位置(字符串、点坐标、列表连接){
超级(coords);
姓名=不结盟运动;
协调=协调;
连接=连接;
}
}

这就是txt文件被读取并放入列表数组的地方

public List<Location> processLocations(){
    List<Location> locations= new ArrayList<Location>();

    for (String location : locationData){
        String[] data=location.split("____");

        String name=data[0];
        Point coord=new Point(Double.parseDouble(data[1]),Double.parseDouble(data[2]));


        List<String> connections= new ArrayList<String>();

        for(String connect: connectionsData){
            String[] con=connect.split("____");
            //System.out.println(con[0]+name);
            if(con[0].equals(name)){
                connections.add(con[1]);
            }
        }

        Location loc=new Location(name,coord,connections);
        locations.add(loc);
    }//for location ends
    return locations;
}//process location ends
公共列表processLocations(){
列表位置=新的ArrayList();
用于(字符串位置:locationData){
String[]data=location.split(“__;”);
字符串名称=数据[0];
点坐标=新点(Double.parseDouble(数据[1]),Double.parseDouble(数据[2]);
列表连接=新建ArrayList();
用于(字符串连接:connectionsData){
字符串[]con=connect.split(“_____;”);
//System.out.println(con[0]+名称);
如果(con[0]。等于(名称)){
添加(con[1]);
}
}
位置loc=新位置(名称、坐标、连接);
位置。添加(loc);
}//位置端
返回地点;
}//进程位置结束

如果访问location.coords变量,它将为给定位置提供正确的点。但是如果我访问distance类的point1,它会为所有位置提供相同的坐标。

这是您的问题
私有静态point1删除静态关键字,我想你应该知道原因。@snajahi神圣的俯瞰之母:p非常感谢你的帮助。