私有实例变量在同一个类和不同类中的访问之间的区别

时间:2016-05-26 09:31:50

标签: java

public class Cart {

    private String id;  
    private List<RentedMovie> rentedMovies = new ArrayList<RentedMovie>();  
    private long totalRent; 
    private long cartItemsCount;

    public Cart(Cart sessionCart) {
        this.id = sessionCart.id;
        this.rentedMovies = sessionCart.rentedMovies;
        this.totalRent = sessionCart.totalRent;
        this.cartItemsCount = sessionCart.cartItemsCount;
    } 
    ..<Getters and setters of all private varibles>..
}

我对java中的构造函数概念有点困惑。在上面的示例代码中,我已经声明了一个Cart构造函数,它将参数作为Cart(可以引用另一个Cart对象)。正如我们在示例类中看到的,所有实例变量都是私有的,如何才能通过引用sessionCart直接访问Cart类的私有变量。理想情况下,我不应该。

请帮忙。

2 个答案:

答案 0 :(得分:2)

private访问修饰符允许访问包含private成员的同一个类中的任何代码,无论访问权限是当前实例的成员还是其他实例。

这允许compareToclone等方法以及复制构造函数访问同一类的不同实例的private个字段。

答案 1 :(得分:2)

访问范围与“哪个对象访问其他对象的值”无关,而与“哪个代码(从哪个类)访问给定类的成员(对象)”无关“

在您的情况下,构造函数能够直接访问这些变量,因为传递给构造函数的对象的类是相同的。这意味着,它是来自类本身的代码访问它。基于此,可以使用私人访问。换句话说,Cart类可以访问Cart类中的私有字段(例如,与this.id相同的方式)。

顺便说一下,不仅仅是具有此权限的构造函数,Cart类中的任何代码都可以执行相同的操作。

查看此文档页面上的更多信息:https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html