这将在Java中进行扩展
所以我有一个过去测验的问题。只要C和D在同一个包中,下面的代码就会编译这将在Java中进行扩展,java,Java,所以我有一个过去测验的问题。只要C和D在同一个包中,下面的代码就会编译 class C { int i; } class D extends C { void m() { this.i = 3; } } 有人能解释一下为什么这是真的还是假的吗?因为类有默认值,这意味着包的可见性。 有关可见性的更多信息,请参阅。这是因为默认可见性为package。因此包中的所有其他类都可以看到该变量。由于您正在扩展C,D继承变量i。它有一个默认访问修饰符 访问修饰符: pub
class C {
int i;
}
class D extends C {
void m() {
this.i = 3;
}
}
有人能解释一下为什么这是真的还是假的吗?因为类有默认值,这意味着包的可见性。
有关可见性的更多信息,请参阅。这是因为默认可见性为package。因此包中的所有其他类都可以看到该变量。由于您正在扩展C,D继承变量i。它有一个默认访问修饰符 访问修饰符:
世界级可见性(所有级别,任何地方)public
与默认值类似,但对扩展类也是可见的受保护
(您实际上没有编写上述三种代码中的任何一种)包级别的可见性default
类级可见性private
i
没有显式写入访问修饰符,这意味着它有一个默认访问修饰符。并且在包装内可见
有关更多信息,请阅读
关于
这个
关键字-它只是对当前对象的引用
由于当前对象的类扩展了
C
,因此它有自己的方法和字段。由于整个软件包中都可以看到i
,因此D
的实例可以通过this
访问它。请阅读:它清楚地解释了您要查找的内容:
这是真的
由于您没有明确指定C#i
可见性,这意味着它具有default
可见性,这意味着只有包可见性。它不同于受保护的,因为这样的字段(或方法、类或其他)不是继承的,因此默认的可见性比受保护的更具限制性
因此,只要C
和D
在同一个包中,在D
中执行this.i
是有效的。否则,即使D扩展了C
,C#i
也不可见,因为它具有default
可见性(不继承)
有关所有可见性修饰符及其工作方式的信息,请参见。为什么不编译此文件?你的问题是什么?我不确定这是否需要向下投票,但问题应该更清楚。唯一更好的答案是,如果你链接到文档。不,受保护的
成员也是包可见的在java中受保护的也是包可见的,为什么?我不知道know@nachokk也不知道;)但事情就是这样…@m0skit0只是一些不清楚的措辞而已。什么是C#i可见性
?在Java中,当你引用一个类的成员时,你就是这样写的。因此,C#i
意味着类C
中的字段i
。或者你只是在愤怒我以为是那样的,但我已经有一段时间没有看到它以那种方式被提及了。在你的答案中加上这个可能是个好主意。看到OP对Java来说显然是非常陌生的,我希望他也会同样迷路。有时多就是少。胡说八道。它是标准的Java表示法。如果OP不理解它,他可以问自己。不,它不会继承它。它看到它是因为它们在同一个包中。我知道它在同一个包中,但是D也扩展了C,所以它也继承了变量,这就是为什么你可以这样做。。你能在不扩展类的情况下做到这一点吗?请解释原因downvote@m0skit0我知道有人在贬低你的帖子,但这并不意味着也要为其他人这样做。我也在这里学习和分享我的知识。我不在乎人们为了好玩或愤怒或其他原因而否决答案。我只是对错误的答案投了反对票<代码>默认值
字段不由子类继承。所以不,D
没有从C
(C#i
)继承i
),我在这里感到困惑。当你指的是继承时,它意味着D可以访问C的所有变量,而无需创建C的实例。这就是它的意思。。你甚至不能把C级扩展到包外,是吗?。只要它们在同一个包中,B就是“继承”C。你能这样做吗?我不扩展C?你不能在你的答案中加一个链接。这不是答案:)