我们可以在其他类的构造函数中使用其他类的方法吗?

时间:2016-03-15 15:53:42

标签: java constructor

我只是一名Java初学者。在做一些练习练习时,我遇到了困惑:我们可以在另一个类的构造函数中使用一个类的方法而只使用类引用吗?如果没有,为什么呢?下面让我试着解释一下:

public class MyCircle {

    private int radius;
    private Point centre;

    public MyCircle(int x,int y,int r){
        **centre.setX(x);**
        **centre.setY(y);**
        radius=r;
    }
    public MyCircle(Point p,int r){
        centre=p;
        radius=r;
    }
    public int getRaduis(){
        return radius;
    }
    public void setRadius(int r){
        radius=r;
    }
    public Point getCentre(){
        return centre;

    }
    public void setCentre(Point p){
        centre= p;

    }
    public int getCenterX(){
        return centre.getX();
    }
    public int getCenterY(){
        return centre.getY();

    }
     public void setCentreXY(int x,int y){
        centre.setXY(x,y);

    }
     public double getArea(){
         return Math.PI*radius*radius;
     }
}

在第一个构造函数centre.setX()中,center.setY()在编译时显示错误,就好像我轻松编译程序center = new Point(x,y)一样。

center.setX()中的方法center.setY()setcenterXY()也不会造成任何问题。

下面的

是Point类:

public class Point {

     private int x;
     private int y;

    public Point(){
        x=8;
        y=9;
    }
    public Point(int x,int y){
        this.x=x;
        this.y=y;
    }

    public int getX(){
        return x;
    }

    public int getY(){
        return y;
    }

    public void setX(int x){
       this.x=x;
    }
    public void setY(int y){
        this.y=y;       
    }
    public void setXY(int x,int y){
        this.x=x;
        this.y=y;
    }

    public double distanceXY(int x,int y){
        int diffX=this.x-x;
        int diffY=this.y-y;
        return Math.sqrt(diffX*diffX+diffY*diffY);
    }

    public double distanceXY(Point p){
        int diffX=this.x-p.x;
        int diffY=this.y-p.y;
        return Math.sqrt(diffX*diffX+diffY*diffY); 
    }
}

2 个答案:

答案 0 :(得分:1)

正如您对帖子所做的评论所述,调用centre.setX(x)centre.setY(y)将无效,因为您尚未初始化centre,因此没有对象可以调用{{1} }和setX(x)方法。

这是一个简单的修复,只是初始化setY(y)并将值传递给构造函数,如下所示:

centre

答案 1 :(得分:0)

执行所需操作的方法是使用Point构造函数中的MyCircle构造函数:

public class MyCircle {

  private int radius;
  private Point centre;

  public MyCircle(int x, int y, int r){
    center = new Point(x,y);
    radius = r;
 }