Java 基础(8)—— 向上转型、向下转型、动态绑定、静态绑定

向上转型与向下转型

这里写图片描述

这里写图片描述

这里写图片描述

public class Test {
    public static void main(String[] args) {

        System.out.println("------向上转型测试------");
        /* 花木兰替父从军
         * 
         */
        Animal am = new Cat();
        am.eat();
        am.sleep();
        am.run();

        // 【只能调用】子类重写的父类方法/属性,以及父类派生的方法
        // 【无法调用】子类独有的方法或属性
        // The method catchMouse() is undefined for the type Animal
        // am.catchMouse();

        // name cannot be resolved or is not a field
        // System.out.println(am.name);

        System.out.println(am.num);
        System.out.println(am.age);

        System.out.println("====================================");

        System.out.println("------向下转型测试------");
        /* 花木兰变回了她自己
         * 
         */
        Cat my_cat = (Cat)am;
        my_cat.eat();
        my_cat.sleep();
        my_cat.catchMouse();

        System.out.println(my_cat.num);
        System.out.println(my_cat.age);
        System.out.println(my_cat.name);

    }       
}

class Animal {
    int num = 10;
    static int age = 20;

    public void eat() {
        System.out.println("动物吃饭");
    }

    public static void sleep() {
        System.out.println("动物在睡觉");
    }

    public void run() {
        System.out.println("动物在奔跑");
    }

}

class Cat extends Animal {
    int num = 80;
    static int age = 90;
    String name = "tomCat";

    public void eat() {
        System.out.println("猫吃饭");
    }

    public static void sleep() {
        System.out.println("猫在睡觉");
    }

    public void catchMouse() {
        System.out.println("猫在抓老鼠");
    }

}
------向上转型测试------
猫吃饭
动物在睡觉
动物在奔跑
10
20
====================================
------向下转型测试------
猫吃饭
猫在睡觉
猫在抓老鼠
80
90
tomCat

用通俗的例子说明 向上转型 与 向下转型

作者:程序狗
链接:https://www.zhihu.com/question/30082151/answer/120520568
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

花木兰替父从军大家都知道花木兰替父从军的例子,花木兰替父亲花弧从军。那么这时候花木兰是子类,花弧是父类。花弧有自己的成员属性年龄,姓名,性别。花木兰也有这些属性,但是很明显二者的属性完全不一样。花弧有自己的非静态成员方法‘骑马杀敌’,同样花木兰也遗传了父亲一样的方法‘骑马杀敌’。花弧还有一个静态方法‘自我介绍’,每个人都可以问花弧姓甚名谁。同时花木兰还有一个自己特有的非静态成员方法‘涂脂抹粉’。但是,现在花木兰替父从军,女扮男装。这时候相当于父类的引用(花弧这个名字)指向了子类对象(花木兰这个人),那么在其他类(其他的人)中访问子类对象(花木兰这个人)的成员属性(姓名,年龄,性别)时,其实看到的都是花木兰她父亲的名字(花弧)、年龄(60岁)、性别(男)。当访问子类对象(花木兰这个人)的非静态成员方法(骑马打仗)时,其实都是看到花木兰自己运用十八般武艺在骑马打仗。当访问花木兰的静态方法时(自我介绍),花木兰自己都是用她父亲的名字信息在向别人作自我介绍。并且这时候花木兰不能使用自己特有的成员方法‘涂脂抹粉’。—–多态中的向上转型

那么终于一将功成万骨枯,打仗旗开得胜了,花木兰告别了战争生活。有一天,遇到了自己心爱的男人,这时候爱情的力量将父类对象的引用(花弧这个名字)强制转换为子类对象本来的引用(花木兰这个名字),那么花木兰又从新成为了她自己,这时候她完全是她自己了。名字是花木兰,年龄是28,性别是女,打仗依然那样生猛女汉子,自我介绍则堂堂正正地告诉别人我叫花木兰。OMG!终于,终于可以使用自己特有的成员方法‘涂脂抹粉’了。从此,花木兰完全回到了替父从军前的那个花木兰了。并且和自己心爱的男人幸福的过完了一生。—–多态中的向下转型


静态绑定

这里写图片描述


动态绑定

这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值