代码之家  ›  专栏  ›  技术社区  ›  Bad Request

为什么要在这里保护字符串构造函数而不是私有的?

  •  1
  • Bad Request  · 技术社区  · 14 年前

    我对这个SCJP练习问题有点纠结,特别是第5行(使用字符串构造函数)。我认为它应该是私有的,但解决方案是“受保护的”。我认为受保护的访问不能满足所有Alpha实例都将字符串Alpha设置为A的要求。如果构造函数受保护,那么包Alpha中的任何其他类,或Alpha的任何子类(不管包是什么)都可以调用它并将Alpha设置为它想要的任何值。阿米丽特?有人能澄清一下吗?谢谢!

    alt text

    1 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    14 年前

    如果构造函数是私有的,Beta如何调用 super(a)

    所以不能是私人的。。。但你是对的:如果是 protected

    new Alpha("some other value")
    

    换句话说,我不相信 private 一个正确的答案。你不能把能见度限制在 只有

    编辑:我知道了:)

    制造 Alpha Beta ( public 很好)。这样第三个条件就自动成立了,因为 从未 是正义的例子吗 阿尔法 !

    package alpha;
    public abstract class Alpha {
        final String alpha;
        Alpha() { this("A"); }
        public Alpha(String a) { alpha = a; }
    }
    
    package beta;
    
    public class Beta extends alpha.Alpha {
        public Beta(String a) { super(a); }
    }
    

    需要对第1点作一点有力的解释。我认为 贝塔 是的实例 instanceof 贝塔 不是“类型的对象” “所以第三点还是可以的。