【问题标题】:Regarding access specifiers关于访问说明符
【发布时间】:2014-01-11 20:14:32
【问题描述】:

我定义了一个类基

class Base  
{  
    private int i;  
    Base(int i)  
    {  
        this.i = i;  
    }  
}  

所以基类的对象可以访问私有变量。

class BaseDemo  
{  
        public static void main(String[] args)  
        {  
            Base objBase = new Base(10);  
            System.out.println(objBase.i);  
        }  
}  

但它给了我一个编译器错误,我在 Base 有私有访问权限。

编码的时候一头雾水,怎么回事?

【问题讨论】:

  • Base 或其包含类中的任何代码都可以访问i。您正在尝试从BaseDemo 访问i
  • 我无法访问变量 i 使用其类的对象。好的,类似地,如果一个方法被定义为私有将无法访问。

标签: java object access-modifiers


【解决方案1】:

错误是因为您违反了访问说明符的规则,私有访问说明符用于使您的变量可以在同一个类中访问

【讨论】:

    【解决方案2】:

    您可能想要定义一个 getter 方法来访问 BaseDemo 类之外的变量。

    public int getI(){
       return i;
    }
    

    也许这对你有用:

    等等。

    【讨论】:

      【解决方案3】:

      问题很简单。您将变量“i”设为私有,您需要一个 pojo(get y set)public 才能使用变量“i”。

      例如:

      public int getI() { return this.i; }

      在实现中使用:

      objBase.getI();

      PDT:对不起我的英语我说西班牙语

      【讨论】:

        【解决方案4】:

        private 方法和变量只能在类中访问。不在课堂之外,即使您创建实例也无法访问它们。

        来自official docs

        private 修饰符指定成员只能在其自己的类中访问

        【讨论】:

          【解决方案5】:

          i 是 Base 类中的私有属性,因此您不能直接访问。这是面向对象的编程概念之一。

          你可以为它创建getter

          在基类中

          public int getI(){
              return this.i
          }
          

          在 BaseDemo 中你可以调用它

           System.out.println(objBase.getI());
          

          【讨论】:

            【解决方案6】:

            Controlling Access to Members of a Class:

            Modifier    Class   Package Subclass    World
            ---------------------------------------------
            public      Y      Y        Y           Y
            protected   Y      Y        Y           N
            no modifier Y      Y        N           N
            private     Y      N        N           N
            

            您应该为该字段设置一个 getter。这就是encapsulation 的全部想法。您应该从外部隐藏您的实现并提供 settersgetters

            【讨论】:

            • 很棒的 ASCII 表 :)
            【解决方案7】:

            BaseDemo 不是Base 的实例,但即使它是Base 的子对象,您也已将字段i 标记为私有。只有类Base 可以访问它,这就是private 的意思。如果是protected,那么Base 的实例或Base 的子类可以访问它。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-01-31
              • 1970-01-01
              • 2012-09-06
              • 1970-01-01
              • 2011-01-28
              • 2017-09-17
              • 2018-01-30
              相关资源
              最近更新 更多