Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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 - Fatal编程技术网

这将在Java中进行扩展

这将在Java中进行扩展,java,Java,所以我有一个过去测验的问题。只要C和D在同一个包中,下面的代码就会编译 class C { int i; } class D extends C { void m() { this.i = 3; } } 有人能解释一下为什么这是真的还是假的吗?因为类有默认值,这意味着包的可见性。 有关可见性的更多信息,请参阅。这是因为默认可见性为package。因此包中的所有其他类都可以看到该变量。由于您正在扩展C,D继承变量i。它有一个默认访问修饰符 访问修饰符: pub

所以我有一个过去测验的问题。只要C和D在同一个包中,下面的代码就会编译

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?你不能在你的答案中加一个链接。这不是答案:)