Java Point和Line

Java Point和Line,我们先扩展一下Point类,在其中增加一个方法,计算到另一个点的距离,代码如下:

// www.coolcou.com
public class Point {
    private int x;
    private int y;
    public Point(int x, int y){
        this.x = x;
        this.y = y;
    }
    public void setX(int x) {
        this.x = x;
    }
    public void setY(int y) {
        this.y = y;
    }
    public int getX() {
        return x;
    }
    public int getY() {
        return y;
    }
    public double distance() {
        return Math.sqrt(x * x + y * y);
    }
    public double distance(Point p){
        return Math.sqrt(Math.pow(x-p.getX(), 2)+Math.pow(y-p.getY(), 2));
    }
}

在类Point中,属性x、y都是基本类型,但类的属性也可以是类。我们考虑一个表示线的类,它由两个点组成,有一个实例方法计算线的长度,如代码如下所示。

public class Line {
    private Point start;
    private Point end;
    public Line(Point start, Point end){
        this.start= start;
        this.end = end;
    }
    public double length(){
        return start.distance(end);
    }
}

Line由两个Point组成,在创建Line时这两个Point是必需的,所以只有一个构造方法,且需传递这两个点,length方法计算线的长度,它调用了Point计算距离的方法获取线的长度。可以看出,在设计线时,我们考虑的层次是点,而不考虑点的内部细节。每个类封装其内部细节,对外提供高层次的功能,使其他类在更高层次上考虑和解决问题,是程序设计的一种基本思维方式。

使用这个类的代码如下所示:

public static void main(String[] args) {
      Point start = new Point(2,3);
      Point end = new Point(3,4);
      Line line = new Line(start, end);
      System.out.println(line.length());
  }

这也很简单。我们再说明一下内存布局,line的两个实例成员都是引用类型,引用实际的point,整体内存布局如图所示。
Java Point and Line

start、end、line三个引用型变量分配在栈中,保存的是实际内容的地址,实际内容保存在堆中,line的两个实例变量line.start和line.end还是引用,同样保存的是实际内容的地址。

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!