在 Java 中,**“超类变量”**一般指的是:用父类(超类 / 基类)类型声明的变量,去引用子类对象。这是 Java 多态的核心用法。
下面从概念、用法、示例、注意事项几个方面说明。
父类 变量名 = new 子类();
例如:
Animal a = new Dog();
Animal 是超类Dog 是子类a 是超类变量class Animal {
void eat() {
System.out.println("动物吃东西");
}
}
class Dog extends Animal {
void eat() {
System.out.println("狗吃骨头");
}
void bark() {
System.out.println("狗叫");
}
}
public class Test {
public static void main(String[] args) {
Animal a = new Dog(); // 超类变量指向子类对象
a.eat(); // 输出:狗吃骨头(多态)
}
}
✅ 调用的是子类重写的方法
a.eat(); // OK
a.bark(); // 编译错误
原因:
编译器只认 Animal 类型,不知道 bark() 存在。
if (a instanceof Dog) {
Dog d = (Dog) a;
d.bark();
}
⚠️ 转型前最好用 instanceof 判断,避免 ClassCastException
void feed(Animal a) {
a.eat();
}
调用:
feed(new Dog());
feed(new Cat());
✅ 提高代码扩展性
List<Animal> list = new ArrayList<>();
list.add(new Dog());
list.add(new Cat());
Animal getAnimal() {
return new Dog();
}
| 点 | 说明 |
|---|---|
| 编译看左边 | 编译器看变量声明类型 |
| 运行看右边 | 实际调用看对象类型 |
| 只能访问超类定义的成员 | 子类特有成员不可直接访问 |
| 多态依赖方法重写 | 静态方法不行 |
Java 超类变量 = 用父类类型接收子类对象,实现多态,提高扩展性,但不能直接调用子类独有方法。
如果你愿意,我也可以讲:
你现在是初学 / 面试 / 项目实战哪种场景?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。