-6

属性如何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;
    }
}
4

3 回答 3

6

因为您使用的是复制构造函数;)

更严重的是:private变量具有类级别的可见性;您的other对象是不同的实例,但属于同一;因此,该对象的实例成员被授予对构造函数可见的权限。

注意“班级水平”。这意味着来自内部类的实例变量对外部类可见,反之亦然:

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

    class B {
        private int b; // instances of A see this
    }
}
于 2013-06-17T14:36:45.350 回答
1
  • 作为班级成员,甚至对班级private 可见
  • 类的每个成员在同一个类中都是可见的
  • 甚至内部类也可以访问私有成员,因为它们属于同一个类
于 2013-06-17T14:39:36.000 回答
1

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


为了消除混淆,是的,您仍然可以跨所述类的实例访问私有成员,因为它们仅在所述类的范围之外“不可见”。

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

于 2013-06-17T14:36:56.373 回答