有关关键字super的问题

问题描述

| 在“ Java in a Nutshell”一书的第3章第3.5节“子类和继承”中,有一段有关使用super来访问重写方法的段落:   请注意,super关键字调用方法的最直接覆盖版本。假设类A有一个子类B,它又有一个子类C,并且所有这三个类都定义了相同的方法f()。方法C.f()可以使用super.f()调用直接覆盖的方法B.f()。但是C.f()无法直接调用A.f():super.super.f()不是合法的Java语法。当然,如果C.f()调用B.f(),则可以合理地假设B.f()也可以调用A.f()。在使用覆盖方法时,这种链接相对常见:这是一种在不完全替换方法的情况下增强方法行为的方式。我们在本章前面显示的示例finalize()方法中看到了该技术:该方法调用super.finalize()来运行其超类finalization方法。 这是什么意思?类C的实例无法调用类A的f()吗?为什么?     

解决方法

它将破坏封装。假设
B.f()
施加了一些约束-
C.f()
应该不能通过直接调用
A.f()
来解决这个问题。相反,它必须经过
B.f()
。     ,  但是C.f()无法   调用A.f() 是的,绝对正确。您只能调用立即超类方法。 查看有关super()的Sun教程