当前位置: 首页 > 知识库问答 >
问题:

从子类访问受保护的超类成员

商迪
2023-03-14

我正在阅读这本Java SCJP的书,我偶然发现了以下内容:

package scjp;

public class Token {

    protected int age = 6; //This is the protected class-level variable.

    public Token(String name){
        this.name = name;
    }
    public Token(String name, int age){
        this.name = name;
        this.age = age;
    }

    public String getName(){
        return this.name;
    }

    public int getAge(){
        return this.age;
    }
}
package pack;

import scjp.Token;

public class son extends Token{

    public static void main(String[] args) {
       System.out.println(Token.age);
    }

}

但是我得到了这个错误:

 age has protected access in scjp.Token
        at pack.son.main(son.java:11)
Java Result: 1

那么,出什么问题了?

共有1个答案

严子默
2023-03-14

您正试图访问具有类引用的超类的非静态受保护成员。

public static void main(String[] args) {
       Token t = new Token("somehting");
       System.out.println(t.age);
    }

会编写和工作很好。

 类似资料:
  • 问题内容: 我想对此进行一些讨论,但无法推断出我的情况的答案。仍然需要帮助。 这是我的代码: 在上面的示例中,下面的一些定义似乎令人困惑: 问题: 为什么我不能从子类实例(对象)访问受保护的成员()? 问题答案: 作为声明类的子类的其他包中的类只能访问其自己的继承成员。 …但不是其他对象的继承成员。

  • 我有两个不同包的亲子班。我正在重写受保护类型的方法。我想访问子类中的超类保护方法。 考虑以下代码: 认为我是Java新手,并在main方法中提供替代comment的答案。

  • 问题内容: 关键字授予对相同包和子类(http://java.sun.com/docs/books/tutorial/java/javaOO/accesscontrol.html)中的类的访问权限。 现在,每个类都有一个超类(http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html)。 因此,我得出结论,即使每个类都可以访问的方法。

  • 问题内容: 这是相同问题的详细阐述版本。 我们无法访问子类(位于不同包中)的子类中的(超类的)受保护变量。我们只能访问supeclass的继承变量。但是,如果将修饰符更改为“ protected static”,那么我们也可以访问超类的变量。为什么会这样呢? 这是我试图解释的相同代码段。 以上行为是预期的。但是我的问题是,如果我们将超类实例变量“ a”的访问修饰符更改为“保护静态”,那么我们也可以

  • 下面是对同一问题稍加阐述的版本。 我们不能访问子类中的受保护变量(超类的),因为子类在不同的包中。我们只能访问supeclass的继承变量。但是如果我们将修饰符更改为“受保护的静态”,那么我们也可以访问超类的变量。为什么会这样? 下面是我试图解释的相同代码片段。 上述行为在意料之中。但我的问题是,如果我们将超类实例变量“a”的访问修饰符更改为“protected static”,那么我们也可以访问

  • 问题内容: 我在派生类中创建了基类的实例,并尝试访问受保护的成员。 我可以直接访问派生类中的受保护成员,而无需实例化基类。 基类: 同一包中的派生类- 不同包中的派生类- 当派生类也位于同一包中,而派生类位于不同包中时,如何使用基类的实例访问派生类中基类的受保护成员呢? 如果我将受保护的成员标记为“静态”,则可以使用驻留在不同包中的派生类中的基类实例来访问基类的受保护成员。 问题答案: 没错,您是