一类通过作文包括在其他类中。如何改变它的私人领域?

时间:2014-02-05 19:26:56

标签: java class

我有简单的课程:

public class Points {

    private int x = 0;

    public void setX(int x) {
        this.x = x;
    }
}

我制作了另一个有点数字段的课程:

public class Curve {

    private Points p;

    public void setX(int x) {
        p.setX(x);
    }
}

因此,类Curve中的setX(int x)方法用于更改Points中私有字段x的值。

最后我以这种方式使用这种方法:

public class UseComposition {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Curve c = new Curve();
        c.setX(1);
    }

}

我认为,这段代码加倍:如果我在Points中更改方法名称,我还必须在类Curve中更改方法setX。 还有其他方法可以解决这样的任务吗? 改变这样的私人价值可能根本不是一个好主意。请帮忙。

5 个答案:

答案 0 :(得分:2)

  

我认为,这段代码加倍:如果我在Points中更改方法名称,我还必须在类Curve中更改方法setX。

不,不。如果需要,您可以 ,但这两种方法是独立的。您根本没有 来公开Points中的所有方法,实际上大部分时间都是您不想要的。您应该只公开与您正在编写的类相关的方法。 有时他们可能只是通过单个字段委派下来,但通常他们会涉及多个字段,或者您需要做其他事情以及调用委托方法。

答案 1 :(得分:0)

您的代码是正确的。在继续工作之前,请仔细考虑名称,你就不会有麻烦...

或者,您可以考虑创建interface,以实现与他人共享的基本功能。这样,如果您在界面上添加/更改/删除内容,classes实施的interface将无法编译,并向您清楚地显示,例如:

Missing Interface method: "setNewX" ...

答案 2 :(得分:0)

还有另一种方法可以做到这一点。您可以通过以下公共获取者访问 p

public class Curve {

    private Points p;

    public void setX(int x) {
        p.setX(x);
    }

    public Points getPoints(){
        return p;
    }
}

在此之后,您可以根据需要更改Points类,而无需更改Points和Curve的方法名称。您只需访问 p ,如下所示。

公共类UseComposition {

public static void main(String[] args) {
    // TODO Auto-generated method stub

    Curve c = new Curve();
    Points p = c.getPoints();
    p.setX(1);
}

}

答案 3 :(得分:0)

在曲线类中使用getter

public Points getPoints() {
    return p;
}

然后在main方法中访问X属性,如下所示:

Curve c = new Curve();
Points p = c.getPoints();
p.setX(1);

答案 4 :(得分:0)

您可以将属性用作Point

public class Point {

    private int x = 0;

    public void setX(int x) {
        this.x = x;
    }
}


public class Curve {

    Point cenetrPoint;

    public void setCenterPoint(Point p) {
        this.cenetrPoint = p;
    }
}