簡體   English   中英

我們可以在其他類的構造函數中使用其他類的方法嗎?

[英]Can we use method of other class in constructor of other class?

我只是一個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()不會產生任何問題。

下面是點類:

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); 
    }
}

正如對您帖子的評論所述,調用centre.setX(x)centre.setY(y)將不起作用,因為您尚未初始化centre ,因此沒有對象可以調用setX(x)setY(y)方法。

不過這是一個簡單的修復,只需使用傳遞給構造函數的值初始化centre ,如下所示:

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

做你想做的事情的方法是使用MyCircle構造函數中的Point構造函數:

public class MyCircle {

  private int radius;
  private Point centre;

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM