私有类属性可见

时间:2013-06-17 14:35:23

标签: java class visibility private

如何在复制构造函数中看到private itemset属性?

import java.util.List;
import java.util.ArrayList;

public class Itemset {

    private List<Integer> itemset = new ArrayList<Integer>();
    private static long count = 0;

    // copy constructor
    public Itemset(final Itemset other) {
        count++;
        this.itemset = other.itemset;
    }
}

3 个答案:

答案 0 :(得分:6)

因为您正在使用复制构造函数;)

更严重的是:private变量具有类级别可见性;您的other对象是一个不同的实例,但它具有相同的;因此,允许从构造函数中看到此对象的实例成员。

注意“班级”。它意味着内部类的实例变量可由外部类看到,反之亦然:

class A {
    private int a; // instances of B see this

    class B {
        private int b; // instances of A see this
    }
}

答案 1 :(得分:1)

复制构造函数是该类的成员,那么为什么不应该可以从它访问itemset变量?类中的所有变量成员对成员函数都是可见的。


为了清除这种混淆,是的,您仍然可以跨所述类的实例访问私有成员,因为它们只是在所述类的范围内“隐藏”

这就是为什么从另一个实例的复制构造函数的调用访问itemset实例的other成员是完全有效的。

答案 2 :(得分:1)

  • 作为班级成员,即使private对于calss
  • 也是可见的
  • 班级的每个成员都在同一个班级中可见
  • 即使是内部类也可以访问私有成员,因为它们属于同一个类