Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/347.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,请看下面的代码: class Rodent { private String hello = "hello" ; public void printHello() { System.out.println(hello); } } public class Mouse extends Rodent { public static void main(String[] args) { Mouse mouse = new Mouse

请看下面的代码:

class Rodent {
    private String hello = "hello" ;

    public void printHello() {
        System.out.println(hello);
    }
}

public class Mouse extends Rodent {

    public static void main(String[] args) {
        Mouse mouse = new Mouse();
        mouse.printHello();

    }
}
如果我们看到,printHello()方法是继承的。此方法在内部使用私有变量。但是这个私有变量不是继承的。那么这段代码是如何工作的呢

它与JavaScript中的闭包类似吗

如果方法
printHello()
被继承,并且它需要一些私有变量,那么这也必须在
Mouse
中可用,因为现在我在
Mouse
中调用
printHello()

编辑:对于那些说将调用父类方法的人,我发现只创建了对象,而没有单独的对象—一个用于子类,一个用于父类

mouse.printHello()

调用类
啮齿动物
中的
printHello
方法,而不是
Mouse
,因此它可以访问私有变量
hello
。正如你所说,它是遗传的

这样想:(尽管术语不正确)

啮齿动物
具有方法
printHello
和私有变量
hello
。但是这种方法是公开的,它可以从
鼠标
中看到(但在啮齿动物类中仍然是

但是,如果将方法添加到
Mouse
并尝试访问变量
hello
,将导致编译错误。

Mouse.printHello()

调用类
啮齿动物
中的
printHello
方法,而不是
Mouse
,因此它可以访问私有变量
hello
。正如你所说,它是遗传的

这样想:(尽管术语不正确)

啮齿动物
具有方法
printHello
和私有变量
hello
。但是这种方法是公开的,它可以从
鼠标
中看到(但在啮齿动物类中仍然是

但是,如果将方法添加到
鼠标
并尝试访问变量
hello
,则会导致编译错误。

请参阅:

子类的实例包含其超类私有字段。因此,在某种意义上,
私有字符串hello
是继承的

但作为一个私人领域,它在啮齿动物之外是无法访问的。但在代码中的啮齿动物之外也无法访问它。

请参见:

子类的实例包含其超类私有字段。因此,在某种意义上,
私有字符串hello
是继承的


但作为一个私人领域,它在啮齿动物之外是无法访问的。但是在你的代码中,除了啮齿动物之外,它也不能被访问。

可能是谁说私有变量不是遗传的?当然是遗传的。只有通过父级限制访问。可能重复谁说私有变量不被继承?当然是遗传的。只有通过父级限制访问。只是想知道说它是继承的(从DigitalRoss对该问题的回答的更新中)是否正确@user7,不,我们不能说它是继承的,但是它在这样创建的对象中存在。@user7我的措辞是“在某种意义上”。在某种意义上,超类的这个私有字段实际上包含在子类的对象实例中。严格地说-你可能是对的。@BreakingBenjamin那么继承的方法和继承的字段有什么区别呢?@lexicore看到所有的东西都只存在于对象中,但最终存在于对象中,我们说
inherited
只是因为JLS要求:如果我错了,请纠正我。只是想知道说它是继承的(从DigitalRoss对这个问题的回答的更新中)是否正确@user7,不,我们不能说它是继承的,但是它在这样创建的对象中是
存在的。@user7我的措辞是“在某种意义上”。在某种意义上,超类的这个私有字段实际上包含在子类的对象实例中。严格地说-你可能是对的。@BreakingBenjamin那么继承的方法和继承的字段有什么区别呢?@lexicore看到所有的东西都只存在于对象中,但最终存在于对象中,我们说
inherited
只是为了满足JLS的要求:如果我错了,请纠正我。