java多态父类引用指向子类对象为什么不能调用子类特有的方法?

我们在学习java面向对象时都会发现当父类引用指向子类对象不能调用子类特有的方法

首先我们需要了解一下java多态的具体体现
1.一个对象的编译类型和运行类型可以不一致
2.编译类型在定义对象时就确定了,无法改变
3.编译类型看定义时候 =等于号的左边 运行类型看等号右边

下面举一个例子来说明:

在这里定义一个动物类,再定义一个鸟类继承自动物类

    public class Anmial {  //定义一个动物类int age = 10;String name = "1234";public String getName(){return this.name;}public  String getAge() {return age;}}
    public class Bird extends Anmial {int age = 20;String name = "Bird name";public String getName() {return name;}public  String getAge() {return age;}public void fly(){  //birdSystem.out.println("鸟会飞");;}}
    public class Test {public static void main(String[] args) {Anmial anmial = new Bird();System.out.println(anmial.age); //20anmial.fly(); //报错}}

这是因为在javac编译时发现anmial这个父类中并没有fly这个方法
代码执行是先编译后运行虽然运行类型是Bird但是在编译已经没法通过了

举一个生活中的例子,猫狗鸟都是动物 鸟会飞是一个独特的不能说动物类都会飞

可以稍微改一下

         public static void main(String[] args) {Anmial anmial = new Bird();System.out.println(anmial.age); //20((Bird) anmial).fly(); //鸟会飞}}

什么意思呢? (向下转型 ) 把anmial这个父类指向强制转为Bird类

而刚刚 下面这段代码就是典型的向上转型

 Anmial anmial = new Bird();

java多态父类引用指向子类对象为什么不能调用子类特有的方法?相关推荐

  1. Java多态 父类引用指向子类对象

    原文地址http://www.cnblogs.com/111testing/p/6880831.html Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 ...

  2. java子类引用指向父类对象_Java多态 父类引用指向子类对象

    Java多态的三个必要条件: 1. 继承 2. 子类重写父类方法 3. 父类引用指向子类对象 然后看一个例子 输出结果为: 给出结论:Father  c  =  new  Child()    在c的 ...

  3. Java中父类引用指向子类对象好处

    比如对于HashMap与Map的理解: HashMap 是 Map 接口的常用实现类(Map是一个接口),是一个键值对集合, 建议使用实现接口的方式使用Map,如:Map<String, Obj ...

  4. Java关于父类引用指向子类对象

    1. 首先, java的多态是指子类重写了父类的方法,在程序运行期间(非编译),根据引用指向的"实际对象"来调用对象的方法,子类是不能重写父类的变量的. class Father{ ...

  5. 多态父类引用指向子类对象时,如何调用子类的独有方法?

    父类:A 子类:Person A a1 = new Person(); if(a1 instanceof Person) { System.out.println("true"); ...

  6. 一种排序--引发:java两个引用指向同一个对象

    地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=8 一种排序 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 现在 ...

  7. java 父类this_java父类方法中使用this,可以把this强转为子类对象,然后调用子类的实例方法,怎么解释?...

    1.代码如下 父类代码: public class A { public void a(){ B b=(B)this; System.out.println(b.getNum()); System.o ...

  8. java -----多态:父类引用指向子类对象

    生活中的人物视角 程序中的多态 概念:父类引用指向子类对象,从而产生多种形态 一个引用变量到底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定 比 ...

  9. java 父类引用指向子类对象---动态绑定

    知识点: 1.java 中父类引用指向子类对象时动态绑定针对的只是子类重写的成员方法: 2.父类引用指向子类对象时,子类如果重写了父类的可重写方法(非private.非 final 方法),那么这个对 ...

最新文章

  1. How to Run a Stress Test in JMeter
  2. 后端直接跳转前端页面_WEB前端开发中页面跳转等待时间过长如何解决?
  3. 【商业落地篇】Gartner第四范式全球首发AutoML系列白皮书(限时免费下载)
  4. 朝着理想坚实迈进_坚实原则:开放/封闭原则
  5. Mongo读书笔记1 -- GridFS
  6. 前端:HTML/02/排版标记,块元素,行内元素,html字符实体,列表标记,图片标记
  7. magrittr | R语言的管道操作符
  8. SuseLinux详解(1)——设置开机启动为命令行模式
  9. Windows下如何使用CMD命令进入MySQL数据库
  10. AtCoder Grand Contest 025 B - RGB Coloring
  11. 前后端分离项目,标准json协议格式参考
  12. 将redis加入到Windows服务开机启动
  13. 超级实用网址合集(必须收藏一波)
  14. php doctrine 使用,php - 使用doctrine2删除级联
  15. Appium工作日记:Message: An element could not be located on the page using the given search parameters.
  16. 一起学JAVA之【基础篇】4种默认线程池介绍
  17. flex布局实现无缝滚动
  18. 电赛专题 | E题-互联网的信号传输
  19. 码云+docker+jenkins持续集成
  20. android 获取刘海高度,Android各厂商的刘海屏高度获取工具类

热门文章

  1. LINUX设备驱动模型分析之三 驱动(DRIVER)接口分析
  2. 气液增压缸选型要认真对待
  3. AOP之JoinPoint.getSignature()
  4. wifi连接问题debug
  5. js中构造函数的继承
  6. Linux快捷键不能调节亮度,linux debian ubuntu等亮度调节失效或滑竿无效的解决办法...
  7. 圣诞节送什么礼物好?高品质蓝牙耳机推荐
  8. JS电子表数字时钟js特效代码
  9. Linux (dns主从配置 dns缓存配置)
  10. 当你孤单你会想起谁,是不是翻遍了所有的通信录,微信和QQ好友,却找不到陪你的人?...