前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java-多态

Java-多态

作者头像
Fisherman渔夫
发布2019-07-31 14:37:02
4790
发布2019-07-31 14:37:02
举报
文章被收录于专栏:渔夫渔夫

版权声明: https://blog.csdn.net/li_xunhuan/article/details/88932792

例程: /** * 测试多态 * @author lixunhuan * */

代码语言:javascript
复制
class Animal{
public void shout(){
	System.out.println("叫了一声!");
}
}
class Dog extends Animal {
public void shout(){
	System.out.println("汪汪汪!");
}
public void watchDoor(){
	System.out.println("看门中!!");
}
}
class Cat extends Animal{
public void shout(){
	System.out.println("喵喵喵!!");
}
}
public class TestPolym {
public static void main(String[] args){
	Animal a1 = new Cat();
    animalCry(a1);
    Animal a2 = new Dog();
    animalCry(a2);
     
    //编写程序时,如果想调用运行时类型的方法,只能进行强制类型转换。
    // 否则通不过编译器的检查。
    Dog dog = (Dog)a2;//向下需要强制类型转换
    dog.watchDoor();
}
static void animalCry(Animal a){
	a.shout();
}
}

运行结果: 喵喵喵!! 汪汪汪! 看门中!!

多态的要点: 1.在一个方法中,其定义入口为父类引用对象(指向的是地址),但是输入却是指向了子类引用对象; 2.多态是方法的多态,而不是属性的多态 3.多态三个必要条件::继承,方法重写,父类引用指向子类对象 4.Animal a1 = new Cat();animalCry(a1);和Cat a1 = new Cat();animalCry(a1);实际上是等效的,也就是第一种只是说a1的编译类型为Animal,但是Cat才是运行时的对象类型,所以两者的运行结果是相同的(这也是我的疑问,这改一下就避免5出现的缺点,为何一定要用父类去进行编译?而且真的不影响多态吗?) 5.就是无法调用子类特有的功能,比如,我不能使用父类的引用变量调用Dog类特有的seeDoor()方法,必须要么强制类型转换才能调用,如: Dog dog = (Dog)a2;//向下需要强制类型转换 dog.watchDoor(); 要么,定义的时候将 Animal a2 = new Dog();转化为Dog a2 = new Dog();

6.

在这里插入图片描述
在这里插入图片描述

7.多态的实现语句: static void animalCry(Animal a){//注意一定要采用父类描述输入引用对象 a.shout(); }

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019年03月31日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档