回答
它怎么可能是多重继承?
class Object { /* stuff */ }
class Foo /* implicit extends Object */ {}
class FooBar extends Foo /* and therefore extends Object */ {}
The rules are described in the Java Language Specification:
类对象所有其他类的超类(§8.1.4)。
编译器是如何知道的?任何机构都告诉我编译器是如何工作的? – user2848012
@ user2848012编译器如何知道什么?规则在Java语言规范中指定。为了使编译器与Java兼容,它需要遵循这些规则。 –
当你有像
class A {}
然后A
隐含延伸Object
。事实上字节码类似
class A extends Object {}
现在,如果我们有
class B extends A {}
然后B
延伸A
,但也的Object
一个子类,因为A
是Object
子类。这是没有,不过,多重继承:
Object | A | B
多重继承应该是这样的:
Object A \ / \ / \/ B
即B
从两个层次无关的类继承。
类对象是类层次结构的根。每个类都有Object作为超类。所有对象,包括数组,都实现了这个类的方法。 Java documentation
您的困惑似乎在术语“多重继承”中。多重继承指对象可以是多于一个其他类型的DIRECT后代。
这将是多重继承的一个例子,在Java中不支持:
class Z extends A, B, C{
}
多重继承意味着一个类从多个类不在同一行的继承继承。多重继承的问题是,如果方法和实例变量具有相同的名称,但具有不同的操作或值,则不清楚要使用哪一个继承的方法或变量。
例如:
class Foo {
void baz() { }
}
class Bar {
void baz() { System.out.println("test"); }
}
class FooBar extends Foo extends Bar {}
是多重继承的一个例子。如果FooBar类的一个对象叫做baz(),我们不会知道使用哪个baz()。
但是,如果类FooBar只扩展Foo类,而不是类Bar(和类Foo扩展类Object),那么它不是多继承。如果Object中的方法(如toString())要写入Foo,则此方法将覆盖Object的toString(),即类FooBar会知道子类Foo的toString()应该被调用,而不是父类, Object的toString()。
当你看一个类,例如A
,查找继承树将始终返回到Object
。如果A
和Object
之间有多个类别,则这不是多重继承。由此可得出像这样:当一个类是继承树至少有两个“分支”的子发生
Object
|
SomeIntermediateClass
|
A
多重继承。例如:
Object
| |
A B
\/
C
在上述情况下,C
从多个父母继承,并因此参与多继承。
- 1. 每个类都继承Object类
- 2. 每个SASS扩展类
- 3. 在Objective C中,每个用户类都默认扩展NSObject吗?
- 4. 扩展一个类,每个类都有很多实现,每个实现都有Scala中的主要方法
- 5. Java中的每个类扩展Object.Then如何扩展其他类。因为一个类只能扩展一个类
- 6. 因为所有类都从Object类扩展,因此Java中的多继承?
- 7. Java中的每个子类都从两个类(Object及其超类)继承?
- 8. 每个数据类型是否都继承自Object?
- 9. 所有Android类都扩展Activity吗?
- 10. 扩展另一个类的类如何扩展Object类,尽管不允许多重继承?
- 11. 类都扩展一个抽象类,实现了接口
- 12. 爪哇 - 扩展扩展一个Thread类
- 13. 扩展一个扩展类的模块
- 14. 扩展两个类
- 15. 扩展单个类
- 16. 每次我打包扩展程序时,都会生成Chrome扩展程序ID
- 17. 每个类如何继承Object类?
- 18. 扩展扩展类型
- 19. 扩展扩展类Zend_Db_Table_Row_Abstract
- 20. 如何在java中为默认的“Object”类创建对象?正如你所知,默认情况下每个类都扩展了对象类
- 21. C#泛型:列表<Object>或新类扩展名单<Object>
- 22. Java不支持多重继承,但隐含在Java中的每个类扩展了Object并允许多一个
- 23. Python列表扩展,用新行附加每个扩展值
- 24. 将github-highlight-selected-chrome扩展扩展到每个网页
- 25. 从另一个扩展参数化泛型类扩展类
- 26. 是否有可能扩展一个库类扩展MY_Controller类
- 27. {... object,property:value}如何使用扩展语法?
- 28. 如何扩展多个类
- 29. 动态扩展一个类
- 30. 替代扩展多个类
是的......但多重继承是**不是**这个 – ppeterka
不是每个类_directly_扩展了'Object'。给定'A类扩展对象'和'B类扩展A','A'直接扩展'Object','B'直接扩展'A','B'通过'A'间接扩展'Object'。如果'B'通过两条不同的路径扩展了'Object',那么只有钻石问题。一个类有多个超类并不一定意味着你有多重继承。 –