Java 关于类定义的混淆
我对下一个术语有点困惑。我想我是对的,但程序员总是说错话,所以我想确定一下Java 关于类定义的混淆,java,android,kotlin,Java,Android,Kotlin,我对下一个术语有点困惑。我想我是对的,但程序员总是说错话,所以我想确定一下 如果我们有A类,B类是A类的内部类,我听到很多程序员说“A类是B类的父类”。 对我来说,这是错误的。A类是B类的外层。 仅当类B继承类A时,类A才是父类 这是非常令人困惑的,因为(因为我是Android开发者)人们在定义布局时也使用这个术语,他们说: Imageview、TextView和Edittext是ConstraintLayout的子级,ConstraintLayout是其父级。 尽管我同意这句话,但它与前面关于
如果我们有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>
当我们有这样的类定义时:
class A extends B {
static class X {}
class Y {}
}
然后,按照标准术语[,],您可以说:
- 类
是A
B
- 类
是B
a
- 类
和X
是Y
A
- 类
是A
和X
的封闭类Y
- 类
是X
A的静态嵌套类
- 类
是Y
A的内部类
ProgressBar
是树中的ConstraintLayout
的子级。我不知道它背后的历史,但我敢打赌,在类存在之前,人们就已经想到了树数据结构
在Java类的上下文中,还存在父(超类)或子(子类)关系。在这种情况下:类B扩展了A
,B是子类,A是父类
内部类是完全不同的东西。内部类不是其封闭类的子类,似乎与此讨论无关。任何人把一个内部班级称为孩子都是使用了错误的术语。我个人从未听说过它们被称为封闭类的子类。有些事情需要澄清: 在类的上下文中:假设您有类
A
扩展类B
。类A
是类B
的超类,B
是A
的子类。将超类称为“父类”的用法要少得多,但仍然准确
外部类A
的内部类B
不是子类,因为两者之间没有层次关系
然而,在实例的上下文中,故事是不同的。如果你有一个
列表“我听到很多程序员说“类a是类B的父类”,这是错误的。语言引用术语是“封闭类”,而不是“外部类”;但是如果你说“外部”,我就知道你的意思了。我要指出的是,“父类”在语言规范中也不是一个特别广泛使用的术语。我相信你的意思是“超类”,我怀疑同事也会考虑这些同义词。我只能找到;这是超类的意思。所以,我不知道“很多程序员”为什么会将封闭类称为“父类”有什么语言学上的原因;这不是这个词的标准用法。我的评论是@Tewu answerYes中需要回答的问题。这也是我的看法。但在计算机科学的树结构中,我们使用父子术语,即使不涉及继承。这是否意味着我们在编程中命名事物时缺乏一致性,仅此而已?当我们谈论树结构时,我们谈论的是“父节点”和“子节点”。如果你问,当我们谈论一般的树结构时,是否有不同的术语,当我们谈论一个系统的类的结构时,那么是的,术语上存在差异。尽管如此,我不会称之为缺乏一致性。有些事物具有树状结构,我们使用特定于这些事物的术语来描述它们;e、 组织结构中的“下属”和“主管”。同样,类的结构在Java中是一个树,但是你可以在支持多重继承的编程语言(例如C++)中创建类的非树结构。我认为你谈论的是数据模型,而不是一般的实例。你可以模拟任何东西。在您的示例中,您可以
class Node {
List<Node> children;
void addChild(Node node) {
children.add(node);
}
}
Node a = new Node();
Node b = new Node();
a.addChild(b);