多态的动态绑定


1.多态中的成员变量

/**
 * 多态 动态绑定
 * 
 * @author wql
 *
 */
class Fu {
    int num = 3;
}

class Zi extends Fu {
    int num = 4;    //这里并不是覆盖,变量不存在覆盖
}

public class Demo {
    public static void main(String[] args) {
        Fu f = new Zi();    //向上转型
        System.out.println(f.num);
    }
}

运行结果
3

这里写图片描述
在多态中的成员变量:
编译时:参考引用变量所属的类中是否有调用的成员变量,若有、编译成功,若无、编译失败(父类不可以调用子类特有的成员变量)
运行时:参考引用变量所属的类中是否有调用的成员变量,并运行该所属类中的成员变量
简单说:编译和运行都参考等号左边


2.多态中的成员函数

class Fu {
    void show(){
        System.out.println("fu...show");
    }
}

class Zi extends Fu {
    void show(){
        System.out.println("zi...show");
    }
}

public class Demo {
    public static void main(String[] args) {
        Fu f = new Zi();    //向上转型
        f.show();
        //此时父类带有的引用地址是子类对象在堆中的地址,当其调用函数方法时,会优先考虑子类对象中的,这就是动态绑定
    }
}

运行结果
zi…show

在多态中的成员函数:
编译时:参考引用变量所属的类中是否有调用的函数,若有、编译成功,若无、编译失败(父类不可以调用子类特有的函数方法)
运行时:参考对象所属的类中是否有调用的成员函数,若有、并运行该成员函数,若无,则通过super();去调用父类中该成员函数
简单说:编译参考等号左边,运行都参考等号右边


3.

class Fu {
    static void show(){
        System.out.println("fu..static..show");
    }
}

class Zi extends Fu {
    static void show(){
        System.out.println("zi..static..show");
    }
}

public class Demo2 {
    public static void main(String[] args) {
        Fu f = new Zi();    //向上转型
        //静态函数方法有些特殊,其实静态函数并不需要对象来调用,直接用类名调用即可,因为它并不存在于内存的堆中,是在内存的方法区中,当多态子类去调用时,会优先考虑父类
        f.show();
    }
}

运行结果
fu..static..show

在多态中的静态方法:
编译时:参考引用变量所属的类中是否有调用的静态方法,若有、编译成功,若无、编译失败(父类不可以调用子类特有的静态方法)
运行时:参考引用变量所属的类中是否有调用的静态方法,并运行该方法
简单说:编译运行都参考等号左边


之前转载过别人写的类似文章(http://blog.csdn.net/qq_36330228/article/details/76695401),随着学习觉得自己也有些理解,便在此分享下,不足之处,望指出,一起交流

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-小龙人

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值