温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java超类变量如何访问

发布时间:2026-10-11 05:27:29 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 中,**“超类变量”**通常有两种理解,下面分别说明,并给出访问方式。


一、父类(超类)中定义的成员变量

1️⃣ 子类直接访问(public / protected / 默认)

如果父类的变量不是 private,子类可以直接访问:

class Animal {
    protected String name = "动物";
}

class Dog extends Animal {
    void show() {
        System.out.println(name); // 直接访问超类变量
    }
}

2️⃣ 父类变量是 private(最常见情况)

private 变量不能被子类直接访问,必须通过:

  • getter / setter
  • 或构造方法
class Animal {
    private String name;

    public String getName() {
        return name;
    }
}

class Dog extends Animal {
    void show() {
        System.out.println(getName());
    }
}

二、子类中“超类变量”被隐藏(变量隐藏)

当子类和父类有同名变量时,子类变量会“隐藏”父类变量:

class Animal {
    String type = "animal";
}

class Dog extends Animal {
    String type = "dog";

    void show() {
        System.out.println(type);          // dog
        System.out.println(super.type);    // animal(访问超类变量)
    }
}

✅ 使用 super.变量名 访问被隐藏的父类变量


三、通过“超类引用”访问子类对象

Animal a = new Dog();
  • 编译时只看 Animal
  • 只能访问 Animal 中定义的变量
  • 不能访问子类新增变量
class Animal {
    String name;
}

class Dog extends Animal {
    String breed;
}

Animal a = new Dog();
a.name = "Tom";      // ✅
// a.breed = "Lab";  // ❌ 编译错误

如果必须访问,需要向下转型:

if (a instanceof Dog) {
    Dog d = (Dog) a;
    d.breed = "Lab";
}

四、静态变量(类变量)

class Animal {
    static int count = 0;
}

class Dog extends Animal {
    void show() {
        System.out.println(Animal.count); // 推荐
        System.out.println(count);         // 也可
    }
}

总结速查表

场景 访问方式
父类非 private 变量 直接访问
父类 private 变量 getter / setter
同名变量隐藏 super.变量
超类引用指向子类 只能访问超类变量
静态变量 类名.变量

如果你指的是 “反射访问超类变量”、“泛型超类” 或 “抽象类变量”,可以告诉我,我可以继续深入讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手