2016-05-26 3 views
0
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). Как видно из класса sample, все переменные экземпляра являются частными, как я могу получить доступ к приватным переменным класса Cart через ссылочный sessionCart напрямую. В идеале я не смог бы этого сделать.Разница между доступом переменных частного экземпляра в том же классе и в другом классе

Пожалуйста, помогите.

+1

вот почему один использовать методы общественных геттерные – emotionlessbananas

+0

или вы можете попробовать отражение, но не рекомендуется лол – emotionlessbananas

ответ

2

Область доступа делает не имеет отношения к «какой объект получает доступ к ценности того, что другой объект», а скорее «какой код (из которого класс) получает доступ пользователей (объектов) данного класса»

В вашем случае конструктор может обращаться к этим переменным напрямую, потому что класс объекта, переданного конструктору, тот же. Это означает, что это код из самого класса, который обращается к нему. Исходя из этого, доступен частный доступ. Другими словами, его класс Cart, получающий частные поля из класса Cart (так же, например, сказал бы this.id).

И BTW, это не просто конструктор, обладающий этой привилегией, любой код внутри класса Cart может сделать то же самое.

Проверить больше информации на этой странице документации: https://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

+0

Спасибо, Эрнст за четкое объяснение. теперь понятна концепция: D – malviyarahuljayendra

2

private модификатор доступа допускает доступ к любому коду в том же классе, который содержит член private, независимо от того, является ли доступ к члену текущего экземпляра или другого экземпляра.

Это позволяет использовать такие методы, как compareTo и clone, а также конструкторы копирования для доступа к полям private другого экземпляра того же класса.

+0

спасибо Эран за ответ. – malviyarahuljayendra

Смежные вопросы