java 子类继承父类的成员变量

simisty 2016-11-10 10:54:04
1,问题代码:

public class ClassA {
int count=2;

public void display(){
System.out.println(this.count);
}

}






public class ClassB extends ClassA {
int count=20;

public void display(){
System.out.println(this.count);
}

public static void main(String[] args){
ClassA a=new ClassB();
System.out.println(a.count);
a.display();

}

}



程序运行结果: 2, 20
2 问题:
为什么上面的结果输出是2,和20。
请从编译器的角度和内存分配的角度分析这个问题。

...全文
1102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
sky_08_06_02 2016-11-18
  • 打赏
  • 举报
回复
simisty 2016-11-17
  • 打赏
  • 举报
回复
引用 8 楼 qq_32296307 的回复:

public class test extends ClassA {
    int count=20;
    
    @Override
    public void display(){
        System.out.println(this.count);//int test.count
    }
     
    public static void main(String[] args){
        ClassA a=new test();
        System.out.println(a.count);//int classA.count
        a.display(); //@Override简单理解就是这个句话下边的方法是继承父类的方法,对其覆盖
    }     
}
class ClassA {
    int count=2;
     
    public void display(){
        System.out.println(this.count);
    }
     
}
谢谢,理解了
simisty 2016-11-16
  • 打赏
  • 举报
回复
引用 6 楼 dietime1943 的回复:
下面的文章对你有些帮助 http://blog.csdn.net/dietime1943/article/details/52926390
谢谢!
huskyui 2016-11-16
  • 打赏
  • 举报
回复

public class test extends ClassA {
    int count=20;
    
    @Override
    public void display(){
        System.out.println(this.count);//int test.count
    }
     
    public static void main(String[] args){
        ClassA a=new test();
        System.out.println(a.count);//int classA.count
        a.display(); //@Override简单理解就是这个句话下边的方法是继承父类的方法,对其覆盖
    }     
}
class ClassA {
    int count=2;
     
    public void display(){
        System.out.println(this.count);
    }
     
}
bluetata 2016-11-15
  • 打赏
  • 举报
回复
qq_36663793 2016-11-11
  • 打赏
  • 举报
回复
是子类重写父类方法产生覆盖吗?
  • 打赏
  • 举报
回复
2楼说的挺有道理的 输出的20 是 new ClassB(); B的display()方法值
  • 打赏
  • 举报
回复
成员变量是没有动态绑定的 成员方法有动态绑定 System.out.println(a.count); a.count a声明的是ClassA类型,ClassA类型的count为2,输出为2 a.display();调用方法,a的实际类型是ClassB,通过动态绑定调用ClassB的display方法,输出当前对象的count,为20
qq_36663793 2016-11-11
  • 打赏
  • 举报
回复
classA在第一次执行时os会在方法区中给他分配一个区域!而在classB继承A后!要看子类是否覆盖父类!在本题中20是子类所特有对象!所以在内存去os要重新给子类中20重新分配空间!由于存在继承关系!2与20都是独立的所以最后输出结果为2和20。线 在jvm调用主方法时!生成的.class.字节码由于不存在覆盖问题!所以生成的只是子类中特有和共有的! 编译器!这个一会再说!
nikyotensai 2016-11-11
  • 打赏
  • 举报
回复
针对“java 子类继承父类的成员变量”,我只想说,父类无法调用子类成员变量。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧