多态中成员变量、成员方法、静态方法访问的特点 、多态中向上转型和向下转型

多态中成员变量、成员方法、静态方法访问的特点

特点

  • 成员变量:编译看左边(父类),运行看左边(父类)

  • 成员方法:编译看左边(父类),运行看右边(子类) (动态绑定)

  • 静态方法:编译看左边(父类),运行看左边(父类)(静态和类相同,算不上重写,所以访问还是左边的)

  • 总结:只有非静态的成员方法才会编译看左边,运行看右边。

代码

public class Demo2_polymorphic {
    public static void main(String[] args) {
        Father f = new Son2 ( );        //父类引用指向子类
        System.out.println (f.num);
        f.print ( );
        f.Method ( );
        System.out.println ("-----------------");
        Son2 son = new Son2 ( );
        System.out.println (son.num);	//自己有就不用父类的,数据类型是son自己有就输出20
        son.print ( );
        son.Method ( );
    }
}
/*成员变量:编译看左边(父类),运行看左边(父类)
 成员方法:编译看左边(父类),运行看右边(子类)   动态绑定
 静态方法:编译看左边(父类),运行看左边(父类)(静态和类相同,算不上重写,所以访问还是左边的)
总结:只有非静态的成员方法才会编译看左边,运行看右边*/

class Father {                      //父类
    int num = 10;                   //成员变量

    public void print() {            //成员方法
        System.out.println ("father");
    }

    public static void Method() {    //静态方法
        System.out.println ("father static method");
    }
}

class Son2 extends Father {         //子类
    int num = 20;                   //成员变量

    public void print() {            //成员方法
        System.out.println ("zilei");
    }

    public static void Method() {    //静态方法
        System.out.println ("son static method");
    }
}


结果
10
zilei
father static method
-----------------
20
zilei
son static method

内存图方便理解:

成员变量

  1. 主方法main,父类,子类分别加载进内存。
  2. 成员变量进堆存,在super调用父类的成员变量,赋地址,this指针由子类成员变量指向父类。
  3. 主方法进栈,赋地址。

在这里插入图片描述
成员方法
在这里插入图片描述
附:多态中向上转型和向下转型
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微莱羽墨

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值