【问题标题】:Access protected field of inner class through inheritance通过继承访问内部类的受保护字段
【发布时间】:2016-06-15 13:10:43
【问题描述】:

我正在尝试通过以下方式访问 Inner 类的受保护字段 在另一个内部类中继承。但是我遇到了一个问题:

  package a;

    class A{

        public class Inner{
           protected int i =5;
        }
    }

    package b;
    class B{

        public class BInner extends A.Inner{
         dsds
          void test(){
               System.out.println(i);  // that's works fine, i 
            }
        }

       void print(){
         System.out.println(new BInner().i)  // but why i cant access this field from here?  Compiler just says that there is protected access ... 
         }
    }

有没有办法访问这个字段?

【问题讨论】:

  • 您的BInner 课程绝对不能正常工作。请发布代表您的问题的可编译代码。

标签: java inheritance inner-classes


【解决方案1】:

protected 访问修饰符意味着该字段或方法仅对类本身及其子类可用。由于类B 没有扩展B.BInner,所以它不能访问B.BInner.i

使用访问修饰符最常见的方法是使用 getter/setter 对,您可以在 A.Inner 中声明它(因为这是声明 i 并且 B.BInner 将继承的地方方法):

class A{

    public class Inner{
       protected int i =5;

       public int getI() {
           return i;
       }

       public void setI(int i) {
           this.i = i;
       }
    }
}

B.BInner 对象上调用getI() 将返回i 的值,因为它是public,所以它可以在任何地方使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 2016-02-29
    • 2020-11-02
    • 2019-05-16
    • 1970-01-01
    • 2013-03-13
    • 2023-03-23
    相关资源
    最近更新 更多