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的要求:如果我错了,请纠正我。