System.out对象属于System类还是PrintStream类?

5

我是新手程序员,刚开始学习Java。我很好奇System.out对象属于System类还是PrintStream类?

我参考了一本教材《JAVA概念4/e》。教材表明要使用System类中的out对象,必须将其引用为System.out,但是在书后面又说明System.out属于PrintStream类。

我在Google和Stackoverflow上搜索过,但所有答案都太难以理解了。


2
你可以通过 System.out instanceof PrintStream?System.out.println("好的,我是PrintStream"):System.out.println("不,我不是PrintStream") 进行检查。 - Roman C
定义“属于”。在Java中没有意义。System.out是System的一个成员,它的类型是PrintStream。 - user207421
7个回答

7
“out”属于“System”类,类型为“PrintStream” :)

5
这取决于你对“属于”一词的理解。
通常情况下,人们会说out“属于”System ,因为它是在该类中声明的一个静态字段。不过要注意的是,这种所谓的“归属”概念只是一个弱关系,基本上只意味着命名空间的所有权。一个类和它的静态字段之间没有特殊的关系。
你也可以说,由out变量引用的对象属于PrintStream类,因为它是该类(或其子类)的实例,就像“比格犬”属于“狗”类一样。这在Java术语中不是标准用法,但从类型理论的角度来看,它是有道理的,其中一个类型实际上是一组值,并且out的值“属于”由PrintStream类定义的类型/集合。

1
社区维基答案? - Luiggi Mendoza
@LuiggiMendoza 看,我喜欢这个想法! - Marko Topolnik
好的。顺便说一下,我想强调最后一句话:“类和它的静态字段之间没有特殊关系。” - Luiggi Mendoza

3

2

2

0
简单来说,'out' 是一个类型为 'PrintStream' 的类 'System' 中的字段(即对象)。

0

Out是System类中的静态引用变量,其类型为PrintStream(类)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接