父类和超类之间有什么区别吗?超类只是不从其他类继承的父类吗?
5 回答
这更多的是术语差异,父类和子类或超类和子类的概念。它似乎取决于编程语言经验和应用程序领域,您使用哪个以及您何时开始接触面向对象编程。
在这两种情况下,都有一个类,即父类或超类或基类,从该类派生出其他类,即子类或子类。子类或子类通过向正在扩展的类的现有能力添加一些能力来扩展父类或超类。
super()
是如何在派生类中调用 Java 类的父类或超类构造函数。
在面向对象编程的最初几年中,术语发生了相当大的变化,因为各种各样的人在该领域工作并发表论文和书籍并开发了面向对象语言。这一切都是全新的和令人兴奋的,人们试图确定要使用的正确词汇,因此他们尝试各种单词和短语来表达面向对象的概念。
随着许多面向对象编程语言的开发和普及,一个社区围绕着具有特定词汇的语言发展起来。因此,早期接触面向对象的年长和更有经验的程序员可能会称事情有点不同。
父母和孩子也用于描述其他类型的 Is-A 或 Has-A 关系。例如,父窗口和子窗口也用于窗口系统,其中一个窗口,子窗口,包含在另一个窗口,父窗口中。所以父窗口有一个子窗口。
我会说是一样的。
您可能想要区分直接和间接父类或超类,但我想这两个术语也不够清楚。所以如果这是你想要表达的,最好是明确的。
此外,许多编程语言都使用“super”关键字来指代(单个)直接父类。但是即使在那里,如果您调用“超级”方法并且直接父级没有实现它,它也会冒泡。
它们是处理相同 OOP 概念的不同术语:继承。如果类ChildClass
扩展ParentClass
你可以说:
ChildClass
父类是 ParentClassParentClass
是 ChildClass 的超类
继承级别与那里无关,如果超类本身扩展另一个类也没关系。
它们本质上是相同的。根据语言,术语会发生变化。Parent 可能意味着直接的父级,而 Super 类可能意味着任何祖先类。另外,在java中还有super()方法,调用父类的构造函数。
在Ruby语言中,这两个概念的含义不同。
ParentClass -> ChildClass
-> 这用于命名空间
和
SuperClass -> SubClass
-> 这用于继承
以下示例:
ParentClass -> ChildClass
:
class A
def self.f1
puts "A -> #{self.name}.f1 called"
end
# B is childclass of A
class B
def self.f2
puts "B -> #{self.name}.f2 called"
end
end
end
# C is subclass of A
class C < A
def self.f3
puts "C -> #{self.name}.f3 called"
B.f2
end
end
请参阅下面的输出:
C.f1
A -> C.f1 调用
C.f3
C -> C.f3 调用
B -> A::B.f2 调用