我对接下来的条款有些困惑。我想我没错,但是程序员一直都说错了,所以我想确定一下。
如果我们有A类,而B类是A类的内部类。我听到很多程序员说“ A类是B类的父类”。 对我来说,这是错误的。 A类是B类的外部类。 仅当类B继承类A时,类A才是父类。
这很令人困惑,因为(因为我是Android开发人员)人们还在定义布局时使用这些术语,因此他们说:
Imageview,TextView和Edittext是ConstraintLayout的子级,而ConstraintLayout是其父级。 即使我同意这句话,也与前面关于类的示例相矛盾。如果我们遵循前面的示例,我们应该说: ConstraintLayout是外部元素,而这3个是其内部元素。
请有人可以与我分享意见或确认我的疑问。谢谢
android中的布局示例:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".presentation.main.MainActivity">
<ProgressBar
android:id="@+id/progressBar"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
tools:ignore="RtlSymmetry" />
</androidx.constraintlayout.widget.ConstraintLayout>
答案 0 :(得分:2)
当我们有这样的类定义时:
class A extends B {
static class X {}
class Y {}
}
A
是B
B
是A
的超类 X
和Y
是A
A
是封闭的类{strong},分别是X
和Y
X
是A
的静态嵌套类 Y
是A
的内部类 根据Java Documentation,术语“父类”与“超类”同义。不过实际上,它用于表示许多不同的事物(例如“封闭类”或“ parent
字段的类”)。自然语言是一团糟。人们有时会使用不同的名称来称呼同一事物,即使使用适当的标准通用术语也是如此。因此,您唯一可以做的就是要知道,“父类”(取决于上下文)有时可能表示“超类”,有时是“封闭类”,有时还有其他含义。如果您想保持明确,请始终使用术语“超类”而不是“父类”。
答案 1 :(得分:2)
一些事情需要清除:
在类 的上下文中:假设您有类A
扩展了类B
。类A
是类B
的超类,而B
是类A
的子类。将超类称为“父类”的用法很少,但仍然准确。
外部类B
的内部类A
不是子类,因为两者之间没有层次关系。
在实例 的上下文中,情况有所不同。如果您有List<List<?>>
是List
本身的父类?不。
但是假设您有一个
class Node {
List<Node> children;
void addChild(Node node) {
children.add(node);
}
}
Node a = new Node();
Node b = new Node();
a.addChild(b);
现在可以调用a
的{{1}} 父节点了。但是此示例不是在类上下文中,而是实例上下文。
这是两个不同的上下文,一个不应该弄乱它们。
答案 2 :(得分:1)
Imageview,TextView和Edittext是ConstraintLayout的子级,而ConstraintLayout是其父级。即使我同意这句话,也与前面关于类的示例相矛盾。如果我们遵循前面的示例,应该说:ConstraintLayout是外部元素,而这3个是其内部元素。
您认为父母/孩子在谈论类时是专有的术语。那是不对的。许多编程语言甚至都没有类。
您使用UI元素描述的内容更类似于树数据结构。在树中,有父节点和子节点。因此ProgressBar
是树中ConstraintLayout
的子代。我不知道其背后的历史,但是我敢打赌,甚至在类存在之前就已经想到了树数据结构。
在Java类的上下文中,还存在父(超类)或子(子类)关系。在这种情况下:class B extends A
,B是子类,而A是父类。
内部类是完全不同的东西。内部类不是其封闭类的子类,并且与该讨论似乎无关。任何将内部类称为孩子的人都使用了错误的术语。我个人从未听说过它们被称为封闭类的子类。