Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于类定义的混淆_Java_Android_Kotlin - Fatal编程技术网

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的内部类
根据,术语“父类”是“超类”的同义词。但在实践中,它被用来表示许多不同的事物(例如“封闭类”或“父类的类”)。自然语言是一种混乱的东西。人们用不同的名字来称呼同一件事,有时甚至在有标准的公认术语的情况下。所以,你唯一能做的就是意识到“父类”,根据上下文的不同,有时意味着“超类”,有时意味着“封闭类”,有时意味着其他东西。如果您想明确,请始终使用术语“超类”而不是“父类”

Imageview、TextView和Edittext是ConstraintLayout的子级,ConstraintLayout是其父级。尽管我同意这句话,但它与前面关于类的示例相矛盾。如果我们遵循前面的示例,我们应该说:ConstraintLayout是外部元素,这3个是其内部元素

您认为父/子是在谈论类时专门使用的术语。这是不正确的。许多编程语言甚至没有类

您所描述的UI元素更类似于树数据结构。在树中,有父节点和子节点。因此,
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);