Java 为什么下面的继承方法使用超类成员

Java 为什么下面的继承方法使用超类成员,java,Java,请原谅我的无知。下面的代码输出 A1 has name A1 B1 has name A1 但我期待着 A1 has name A1 B1 has name B1 字符串名称在子类中重新定义。有人能解释一下吗 代码片段: 通过在子类中声明一个与父类中声明的变量同名的变量,可以将该变量隐藏在父类中。子类中的变量与父类中同名的变量不同。您可以尝试以下方法: class B1 extends A1 { public B1(){ name = "B1"; }

请原谅我的无知。下面的代码输出

A1 has name A1
B1 has name A1
但我期待着

A1 has name A1
B1 has name B1
字符串名称在子类中重新定义。有人能解释一下吗

代码片段:


通过在子类中声明一个与父类中声明的变量同名的变量,可以将该变量隐藏在父类中。子类中的变量与父类中同名的变量不同。您可以尝试以下方法:

class B1 extends A1 {
    public B1(){
       name = "B1";
    }

    String greeting() {
        return "class B1";
    }
}

通过在子类中声明一个与父类中声明的变量同名的变量,可以将该变量隐藏在父类中。子类中的变量与父类中同名的变量不同。您可以尝试以下方法:

class B1 extends A1 {
    public B1(){
       name = "B1";
    }

    String greeting() {
        return "class B1";
    }
}

通过在子类中声明一个与父类中声明的变量同名的变量,可以将该变量隐藏在父类中。子类中的变量与父类中同名的变量不同。您可以尝试以下方法:

class B1 extends A1 {
    public B1(){
       name = "B1";
    }

    String greeting() {
        return "class B1";
    }
}

通过在子类中声明一个与父类中声明的变量同名的变量,可以将该变量隐藏在父类中。子类中的变量与父类中同名的变量不同。您可以尝试以下方法:

class B1 extends A1 {
    public B1(){
       name = "B1";
    }

    String greeting() {
        return "class B1";
    }
}

您不重写
getName
,因此来自
B1
的使用
A1
实现,它从
A1
返回一个字段
name
,并且无法访问
B1
中的
name
。如前所述,这称为变量隐藏。

您不重写
getName
,因此
B1
中的一个使用
A1
实现,它从
A1
返回一个字段
name
,并且无法访问
B1
中的
name
。如前所述,这称为变量隐藏。

您不重写
getName
,因此
B1
中的一个使用
A1
实现,它从
A1
返回一个字段
name
,并且无法访问
B1
中的
name
。如前所述,这称为变量隐藏。

您不重写
getName
,因此
B1
中的一个使用
A1
实现,它从
A1
返回一个字段
name
,并且无法访问
B1
中的
name
。如前所述,这称为变量隐藏。

下面是一个Oracle JavaDoc,它详细解释了使用Java进行重写和隐藏

另请参阅这篇关于重写Java实例变量的SO文章


我认为这应该有助于解释为什么会发生这种情况,它主要与您如何实例化变量有关。

下面是一个Oracle JavaDoc,它更详细地解释了使用Java进行重写和隐藏

另请参阅这篇关于重写Java实例变量的SO文章


我认为这应该有助于解释为什么会发生这种情况,它主要与您如何实例化变量有关。

下面是一个Oracle JavaDoc,它更详细地解释了使用Java进行重写和隐藏

另请参阅这篇关于重写Java实例变量的SO文章


我认为这应该有助于解释为什么会发生这种情况,它主要与您如何实例化变量有关。

下面是一个Oracle JavaDoc,它更详细地解释了使用Java进行重写和隐藏

另请参阅这篇关于重写Java实例变量的SO文章


我认为这应该有助于解释为什么会发生这种情况,它主要与您如何实例化变量有关。

我知道我在隐藏变量名。但是,我的想法是B1有getName(),JVM在调用方法时应该使用B1的名称而不是A1的名称。那么您的想法是错误的。您可以向B1添加一个getName()函数,该函数从B1类返回name变量,但是扩展A1有什么意义呢?我认为原因在于b上getName()的方法调用不是多态方法调用。这是编译时绑定。我知道我在隐藏变量名。但是,我的想法是B1有getName(),JVM在调用方法时应该使用B1的名称而不是A1的名称。那么您的想法是错误的。您可以向B1添加一个getName()函数,该函数从B1类返回name变量,但是扩展A1有什么意义呢?我认为原因在于b上getName()的方法调用不是多态方法调用。这是编译时绑定。我知道我在隐藏变量名。但是,我的想法是B1有getName(),JVM在调用方法时应该使用B1的名称而不是A1的名称。那么您的想法是错误的。您可以向B1添加一个getName()函数,该函数从B1类返回name变量,但是扩展A1有什么意义呢?我认为原因在于b上getName()的方法调用不是多态方法调用。这是编译时绑定。我知道我在隐藏变量名。但是,我的想法是B1有getName(),JVM在调用方法时应该使用B1的名称而不是A1的名称。那么您的想法是错误的。您可以向B1添加一个getName()函数,该函数从B1类返回name变量,但是扩展A1有什么意义呢?我认为原因在于b上getName()的方法调用不是多态方法调用。这是编译时绑定。我没有否决,因为您包含了完整的代码。但是,对答案进行一些研究是一种典型的好形式,如果你找不到答案,那么