java多态使用案例_程序设计:一个很有趣地理解JAVA多态的例子

前天在逛知乎的时候看到一个很直观地去理解JAVA多态的例子,很简单生动,真的挺有趣,所以我把原答案PO上来分享给大家。

以下是原文的内容:

不请自来,C++的多态不太清楚。java比较熟悉,就说说咯。

用一句话概括就是:事物在运行过程中存在不同的状态。

多态的存在有三个前提:

要有继承关系;

子类要重写父类的方法;

父类引用指向子类对。

但是其中又有很多细节需要注意。首先我们定义两个类,一个父类Animal,一个子类Cat。

9c75b6204398

父类Animal

9c75b6204398

子类Cat

9c75b6204398

测试类Demo_Test1

以上的三段代码充分体现了多态的三个前提,即:

存在继承关系:Cat类继承了Animal类;

子类要重写父类的方法:子类overwrite了父类的两个成员方法eat(),sleep()。其中eat()是非静态的,sleep()是静态的(static);

父类数据类型的引用指向子类对象。

测试类Demo_Test1中Animal am = new Cat();语句在堆内存中开辟了子类(Cat)的对象,并把栈内存中的父类(Animal)的引用指向了这个Cat对象。

到此,满足了Java多态的必要三个前提。

9c75b6204398

输出结果

可以看出来

子类Cat重写了父类Animal的非静态成员方法am.eat()的输出结果为:猫吃饭。

子类重写了父类的静态成员方法am.sleep()的输出结果为:动物在睡觉。(说明没重写成功)

未被重写的am.run()的输出结果为:动物在奔跑。

那么我们可以根据以上情况总结出多态成员访问的特点:

成员变量

编译看父类,运行看父类;

成员方法

编译看父类,运行看子类,动态绑定;

静态方法

编译看父类,运行看父类。

多态的弊端在于子类不能使用自己特有的属性和方法。例如猫有抓老鼠这个方法。但是子类Cat重写了父类Animal的方法,就无法使用猫抓老鼠的方法,当尝试使用时会报错。

9c75b6204398

9c75b6204398

原问题地址:https://www.zhihu.com/question/30082151/answer/120520568注:加群要求 学习交流群:642830685

1、想学习JAVA这一门技术, 对JAVA感兴趣零基础,想从事JAVA工作的。

2、工作1-5年,感觉自己技术不行,想提升的

2、工作1-5年,感觉自己技术不行,想提升的

3、如果没有工作经验,但基础非常扎实,想提升自己技术的。

4、还有就是想一起交流学习的。

5.小号加群一律不给过,谢谢。

转发此文章请带上原文链接,否则将追究法律责任

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值