java - 子类中扩展子类的 super() 构造函数?

标签 java inheritance constructor overriding

我不太确定我的问题措辞是否正确,但我对这些代码行感到困惑。

public class First {
    public String name() {
        return "First";
    }
}

public class Second extends First {
    public void whoRules() {
        System.out.print(super.name() + " rules");
        System.out.println(" but " + name() + " is even better");
    }
    public String name() {
        return "Second";
    }
}

public class Third extends Second {
    public String name() {
        return "Third";
    }
}

Second varSecond = new Second();
Third varThird = new Third();
varSecond.whoRules();
varThird.whoRules();

当上面的执行时,它打印出

First rules but second is even better

First rules but third is even better

为什么不是:

First rules but second is even better

Second rules but third is even better

一个子类可以是另一个类的父类(super class)吗?或者只能有一个(父类(super class))? (使用上面的示例代码) 我知道 FirstSecond 的父类(super class),但是 SecondThird 的父类(super class)吗? 或者 FirstThird 的父类(super class)?

如果有 10 个类相互扩展(第二个首先扩展,第三个第二个扩展,等等)所有这些类的父类(super class)是否都是 First?)

最佳答案

Why wouldn't it be: ... "Second rules but third is even better"

因为类Second中的super.name()引用的是Second的父类(super class),而不是实例的父类(super class)。

来自Java Language Specification : super.Identifier 的形式引用当前对象的标识符字段,但当前对象被视为当前类的父类(super class)的实例。

Can a subclass be a superclass for another class?

是的。

Or can there only be one(superclass)?

每个类最多可以有一个直接父类(super class),而父类(super class)又可以有它的父类(super class),等等。

(Using example code above) I understand that First is a superclass for Second, but is Second a superclass for Third? Or is First the superclass for Third?

First 和 Second 都是 Third 的父类(super class)。

Second 是 Third 的直接父类(super class)。

关于java - 子类中扩展子类的 super() 构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16329973/

相关文章:

java - 是否可以在 JUnit 中设置测试类的方法的返回值?

java - 方法接受 List<String>,需要返回 List<String> 的相同实现

java - OOP - 是否需要构造函数?

javascript - 我可以在不使用 new 关键字的情况下构造 JavaScript 对象吗?

TypeScript 在静态实现中推断出更通用的类型

java - 是否有一个 Java 库可以根据数据的大小将数据缓存在内存或磁盘中?

Java : How to create an object in a method and use it throughout the class?

java - 找到枚举大小的更好方法是什么?

objective-c - 在 Objective-C 中模拟多重继承

javascript - 有人可以解释一下继承在 javascript 中是如何工作的吗