JAVA - 初学者 - 可以在课外访问私有类属性吗?

时间:2012-08-30 11:46:28

标签: java private-class

我对Java OO编程比较陌生,并且已经回顾了与此类似的问题,尽管他们似乎没有直接回答我的问题。

基本上,我理解如果一个类中的数据成员被声明为私有,那么它只能从同一个类中访问。

我的讲师总是建议将所有属性声明为私有 - 为什么会这样?

现在我熟悉使用GET方法,我的问题是,可以通过从另一个类调用PUBLIC'get'方法(返回上述属性)来访问私有属性吗?

例如:

public class Class()
{

    private int number = 0;

    public Class()
    {
    }

    public int getNumber()
    {
        return number;
    }

}

然后从另一个班级开始:

public class Class2()
{

    Class class = new Class();

    public void showNumber()
    {
        System.out.print(class.getNumber());
    }
}

第二个代码块是否允许Class2中的 showInt()中的方法实际访问Class中的private属性?

我想我一直在努力决定是否应该将任何属性或方法声明为 public private ...

是否应该遵循任何特定的经验法则?

感谢响应者的任何帮助。

亲切的问候

5 个答案:

答案 0 :(得分:4)

  

我的讲师总是建议将所有属性声明为私有。

好建议。这条规则有例外,但我会从这开始。

  

据我所知,如果一个类中的数据成员被声明为私有,那么只能从同一个类中访问它。

可以访问

  • 同一文件中的嵌套类。
  • 通过反思访问。
  

第二个代码块是否允许Class2中的showInt()方法实际访问Class中的private属性?

在这种情况下是有效的。通过使用getter,字段可以更改名称,替换为常量或计算或记录,Class2不需要知道。

答案 1 :(得分:2)

是的,如果您创建公共访问者,则可以访问私有字段。

重点是隐藏实现,以便作为实现者,您可以稍后决定使用其他类型的字段(或间接或动态计算),而不必强迫您的类的用户更改其代码。 / p>

它还允许你提供一个getter而不提供任何setter(那么你的字段只能从课外读取)。

许多内容无法在您的代码中编译:

  • 添加括号以调用方法(getInt)
  • class是保留字
  • 一个类不能被称为Class,并且不像你那样被声明

我建议你在提问之前在编辑器(例如Eclipse)中编写编译代码。这项任务可能有助于您了解至少部分问题。

答案 2 :(得分:2)

关键是公共get方法仅返回私有成员的当前值,而不提供对成员本身的访问权限。这意味着你不能以某种方式“获得”成员并改变其价值。

答案 3 :(得分:1)

是。

您必须调用该方法(并且您不能将class用作类名称):

public class Class2()
{

    Class myClass = new Class();

    public void showInt()
    {
        System.out.print(myClass.getInt());
    }
}

您将无法访问私有成员,但会收到该值的副本。在这种情况下,您可以访问方法getInt(),而不是属性。如果您尝试访问该属性:

public class Class2()
{

    Class myClass = new Class();

    public void showInt()
    {
        System.out.print(myClass.x);
    }
}

您将无法访问。

答案 4 :(得分:0)

简答:不。

将所有内容设为私有的一般原因是确保您的类的用户不能以不应该的方式修改内容。

可以做的是定义getter和setter方法。通常,最好只暴露吸气剂,例如

private int foo;

public int getFoo(){
  return foo;
}

通过这种方式,用户可以查看 foo,但不能对其进行更改。