java - 我如何访问 super-super 类,在 Java 中? [里面的小例子]

标签 java super superclass

<分区>

在下面的示例中,如何从 C 访问类 A 的方法 method()

class A {
    public void method() { }
}

class B extends A{
    public void method() { }
}

class C extends B{
    public void method() { }

    void test() {
        method();          // C.method()
        super.method();    // B.method()
        C.super.method();  // B.method()
        B.super.method();  // ERROR <- What I want to know
    }
}

我得到的错误是

No enclosing instance of the type B is accessible in scope

回答:不,这是不可能的。 Java不允许。 Similar question .

最佳答案

你不能——而且是故意的。它会违反封装。您将跳过任何 B.method 想要做的事情——可能会验证参数(假设有任何参数)、强制不变量等。

如果任何派生类都可以跳过它定义的任何行为,你怎么能期望 B 保持一致的世界观呢?

如果 B 提供的行为不适合 C,则不应扩展它。不要试图像这样滥用继承。

关于java - 我如何访问 super-super 类,在 Java 中? [里面的小例子],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698680/

相关文章:

java - 高效的可增长的java字节数组,允许访问字节

java - 从子类构造函数调用 super 构造函数是否会在内存中创建父类(super class)的对象?

java - 没有必要将 super() 放在构造函数中吗?

java - Spring-WS SOAP 将子元素添加到 header

java - Spring PropertyPlaceholderConfigurer 可以忽略属性位置路径中未设置的属性吗?

java - 了解释放资源

java - Java 泛型中 "super"通配符的详细信息

java - java中的引用对象

objective-c - 警告 : incompatible Objective-C types assigning superClass to subClass

java - 父类(super class)使用方法的子类版本?