zoukankan      html  css  js  c++  java
  • 多态的内存分析-转载

    java运行时,在内存里分四个部分。栈,堆,数据区和代码区。。举个例子String str=new String("AAA");str就放在栈里,字符串"AAA"放在堆里。所有的方法代码都放在了代码区。

    public class A{
    public void show(){
    System.out.println("A");
    }
    }


    public class B extends A{
    public void show(){
    System.out.println("B");
    }
    public void say(){
    System.out.println("B says");

    }
    }

    当A a=new B()时,在栈里就有了一个a,而在堆里有个B的对象。。因为a是A类型的,所以它只能看到A里面所包含的属性和方法(此处的方法只是一个方法头,代码在代码区。。)。当调用show方法时,a先找到了自己的方法(头),然后到代码区去找方法体,发现有两个show方法.于是虚拟机会判断调用该方法的具体对象是什么,从而选择相应的方法。从而产生多态。而当调用say方法时,a没在自己代码里找到say方法,所以就不能通过了。。这也就解释了,为什么父类引用不能调用子类自己的方法了

  • 相关阅读:
    [APIO2014]序列分割
    [HNOI2008]玩具装箱TOY
    [ZJOI2007]时态同步
    [FJOI2014]最短路径树问题
    [IOI2011]Race
    [国家集训队]聪聪可可
    矩阵加速递推
    Codeforces Round #669 题意及思路
    Codeforces Round #670 题意及思路
    Codeforces Round #671 题意及思路
  • 原文地址:https://www.cnblogs.com/lonely-buffoon/p/5572931.html
Copyright © 2011-2022 走看看