我们可以在父类的帮助下访问不同包中的受保护变量吗?

Posted

技术标签:

【中文标题】我们可以在父类的帮助下访问不同包中的受保护变量吗?【英文标题】:Can we access protected variable in different package with the help of parent class [duplicate] 【发布时间】:2021-10-14 01:33:49 【问题描述】:

我创建了一个在父类中受保护的变量,但是当我尝试在父类名的帮助下从子类访问它时,我无法访问它。由于父类和子类在不同的包中。

我尝试了下面的代码,我能知道为什么我无法访问它

package basic;

public class AccessModifiers 

    protected int age;

    public AccessModifiers() 
        super();
    

    public AccessModifiers(int age) 
        super();
        this.age = age;
    

    public int getAge() 
        return age;
    

    public void setAge(int age) 
        this.age = age;
    



package inheritance;

import basic.AccessModifiers;

public class Inheritance extends AccessModifiers 

    public Inheritance(int age) 
        super(age);
    

    public static void main(String[] args) 

        Inheritance inheritance = new Inheritance(23);
        System.out.println("Age:" + AccessModifiers.age);
    

【问题讨论】:

age 不是 static 字段,因此您无法访问它。你为什么不直接打电话给inheritance.getAge() 在不扩展任何内容的情况下调用super()(即Object)也有点多余。 【参考方案1】:

这与访问修饰符无关,而是字段不是static。直接替换

AccessModifiers.age

inheritance.age

请注意,protected 访问允许您从子类访问该字段。一旦您将 main 方法移动到另一个非子类或不同包中的类,该字段将不再可访问,您将改用 getAge() 方法。

【讨论】:

以上是关于我们可以在父类的帮助下访问不同包中的受保护变量吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java中的间接子类无法访问的超类中的受保护成员

父类可以看到子类受保护的变量吗?

子类从 Java 中的父类更改受保护的变量

如何在子类中访问超类的“受保护的静态”变量,子类位于不同的包中......?

Java - 子类中的受保护变量是啥类型?

Java - 为啥另一个包中的子级无法通过父级引用访问父级的受保护方法?