如果我创建一个子类的对象,那么是否也会创建子类继承的父类(super class)对象?如果不是那么如何通过创建 Thread 类的子类(在多线程中)调用 Thread 类构造函数并创建 Thread 对象?
最佳答案
子类的实例是父类(super class)的实例。只创建了一个对象,但作为该创建的一部分,构造函数调用一直链接在一起,一直到 java.lang.Object
。例如:
public class Superclass {
// Note: I wouldn't normally use public variables.
// It's just for the sake of the example.
public int superclassField = 10;
public Superclass() {
System.out.println("Superclass constructor");
}
}
public class Subclass extends Superclass {
public int subclassField = 20;
public Subclass() {
super(); // Implicit if you leave it out. Chains to superclass constructor
System.out.println("Subclass constructor");
}
}
...
Subclass x = new Subclass();
System.out.println(x instanceof Subclass);
System.out.println(x instanceof Superclass);
System.out.println(x.superclassField);
System.out.println(x.subclassField);
这个的输出是:
Superclass constructor
Subclass constructor
true
true
10
20
...因为:
- 任何构造函数做的第一件事就是调用同一个类中的另一个构造函数,或者调用父类(super class)构造函数。所以我们在输出中的“子类构造函数”之前看到“父类(super class)构造函数”。
- 我们创建的对象(显然)是
Subclass
的一个实例
- 我们创建的对象也是
Superclass
的一个实例
- 我们创建的单个对象具有两个 字段(
superclassField
和subclassField
)。即使字段是私有(private)的(它们通常是私有(private)的)也是如此 -Subclass
中的代码将无法访问中声明的私有(private)字段>Superclass
,但该字段仍然存在 - 并且仍然可以访问Superclass
中的代码。
事实是我们有一个对象,所有状态(父类(super class)和子类)和所有行为(在父类(super class)中声明的任何方法)
仍然可以在 Subclass
的实例上使用,尽管有些可能被覆盖更特殊的行为)对于理解 Java 的多态性方法至关重要。
关于java - 创建子类的实例是否会自动创建其父类(super class)对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16498211/