Java 一个班级通过作文分到另一个班级。如何更改它';什么是私人领域?

Java 一个班级通过作文分到另一个班级。如何更改它';什么是私人领域?,java,class,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); } } 所以,类曲线中的setX(in

我有一节简单的课:

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);
    }
}
所以,类曲线中的setX(intx)方法用于更改点中私有字段x的值

最后,我以如下方式使用此方法:

public class UseComposition {

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

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

}
我认为,这段代码有一个双重含义:如果我在点中更改方法名称,我还必须在类曲线中更改方法setX。 有没有其他办法来解决这个问题? 也许改变这种私人价值观根本不是一个好主意。请帮忙

我认为,这段代码有一个双重含义:如果我在点中更改方法名称,我还必须在类曲线中更改方法setX


不,你没有。如果愿意,可以这样做,但这两种方法是独立的。您根本不必公开
中的所有方法,事实上,大多数时候您都不想公开。您应该只公开与正在编写的类相关的方法。有时,它们可能只是通过单个字段向下委托,但通常会涉及多个字段,或者除了调用委托方法之外,您还需要执行其他操作。

您的代码是正确的。只要在继续工作之前仔细考虑一下名字,你就不会有麻烦了

或者,您可以考虑创建一个<代码>接口<代码>,它实现与其他人共享的基本特征。这样,如果您在接口上添加/更改/删除内容,则实现了该接口的类将不会编译,并向您清楚地显示,如:


缺少接口方法:“setNewX”

还有另一种方法。您可以通过公共getter提供对p的访问,如下所示:

public class Curve {

    private Points p;

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

    public Points getPoints(){
        return p;
    }
}
在此之后,您可以随意更改Points类,而无需更改Points和Curve的方法名称。您只需访问下面的p

公共课堂作文{

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

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

}在曲线类中使用getter

public Points getPoints() {
    return p;
}
然后在main方法中访问如下的X属性:

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

您可以将属性用作

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

但点p被声明为私有字段。我认为,使用这种结构,使这个领域成为公共领域,保持私有领域。然而,您的setter(设置字段值的方法)是公共的。我的意思是,由于返回的链接,点字段出现在主方法上。但是我将其声明为private,以避免在其他类中执行p.setX(1)(对其他方法也是如此)。可能这不是一个好的解决方案,但是结果是所有的点域都会改变,但是我只想改变一个域。我的意思是这种情况,我假设这个点是一个点的类,如果你假设另一个情况,这是错误的,T将删除我的情况。主要的方法是在大对象中包含小对象。@VladimirS:不是天生的-尽管您应该注意编写大量的传递方法。从一个不知道你的类组成的主叫者的角度来看,总是考虑它是否真的有意义。这些操作需要对整个类有意义。