【问题标题】:Instance variable access by using Inheritance concept [duplicate]使用继承概念访问实例变量
【发布时间】:2015-10-24 09:24:03
【问题描述】:

我在这里使用继承概念。我已将 A 类(超类)扩展为 B 类(子类)。我创建了一个子类的对象,并使用该对象调用了 add() 方法。但它正在打印一个值 5(超类)。 为什么它不采用子类的值 10 ?

class A{
    int a=5;

    public void add(){
        System.out.println(a);
    }
}
class B extends A{
    int a=10;


}
public class InheritExample {

    public static void main(String args[]){
        B b1=new B();
        b1.add();
    }
}

帮助表示赞赏。 谢谢。

【问题讨论】:

    标签: java inheritance


    【解决方案1】:

    没有覆盖实例变量。覆盖仅适用于实例方法。因此,A 类的方法add 只能访问A 中声明的a 变量,即使您为B 类的实例调用该方法也是如此。

    【讨论】:

    • 但是如果我们执行System.out.println(new B().a);,它会打印10,如果我们打印System.out.println(this.a);,它会打印5,但thisB's对象检查gist.github.com/anonymous/8e16a17ae260e36a1bee。如果两种情况都具有相同的B's 对象,那么为什么输出不同?
    • @codegasmer B 有两个名为 a 的实例变量。如果在B 类中声明一个,则隐藏在A 类中声明的那个。 A 类的方法不知道 B 类的 a。另一方面,B 类的方法只能看到B 类的a
    • 当您说 new B().a 时,您并没有使用超类作为参考持有者。也就是说,调用 new B().a 与 A o = new B(); 不同。 o.a; this 指的是使用它的实例,所以你在哪里使用它很重要
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2014-06-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 2018-10-22
    • 2017-05-06
    相关资源
    最近更新 更多