1.向上转型的一个误区

一直以为Child 继承Parent以后, Parent p = new Child();  p可以调用Child类中拓展Parent的方法,原来必须在强制转换成Child类才可以。代码如下:

class Parent{public void f(){};public void g(){};
}
class Child extends Parent{public void f(){};public void g(){};public void h(){};public void i(){};
}
public class ParentSub {public static void main(String[] args){Parent  [] p = {new Child(),new Parent()};p[0].f();     //p[1].h(); errorp[1].g();//((Child)p[1]).h(); error ((Child)p[0]).h();}
}

 

  从 p[1].h(); 无法使用我感受到了糊涂,如果Child 拓展了Parent 的方法,那是不是意味着在多态中不能动态的用到拓展的功能呢?

那么从下面的这个向上转型(子类被转化为父类),可是又缺少了子类的拓展方法。

 1 package com.ebay.polymorphic;
 2
 3 class Parent2{
 4     public void f(){};
 5     public void g(){};
 6 }
 7 class Child2 extends Parent2{
 8     public void f(){};
 9     public void g(){};
10     public void h(){};
11     public void i(){};
12 }
13 public class ParentSub2 {
14     public void polymorphic(Parent2 p)
15     {
16         p.f();
17         p.g();
18         //p.h(); 错误,可是如果我想用到Child类的拓展方法 h 和i 怎么办呢,难道必须重新写一个方法polymorphic(Child p)?
19     }
20     public static void main(String[] args){
21         ParentSub2 ps = new ParentSub2();
22         Parent2 p = new Child2();
23         ps.polymorphic(p);
24
25     }
26 }

  我想如果在编程过程中Parent方法设计不合理,我想在 polymorphic(Parent2 p) 中调用 子类的方法的话,是不是必须重写一个方法不能利用多态的效果呢?这样多态的效果不是消失了吗?我的理解:是不是只有Child在要使用多态的方法(polymorphic)里完全的使用Parent类的已有方法才行,如果想要使用Child的拓展方法,就不能想在多态的方法里实现,必须重写。     有请其他人士来解决,我下次想到了继续来更新。

转载于:https://www.cnblogs.com/liushuiwuqing/p/3305308.html

java 继承多态的一些理解和不理解相关推荐

  1. Java继承多态经典案例分享

    今天动力节点java培训机构小编为大家分享Java继承多态经典案例,希望通过此文能够帮助到大家,下面就随小编一起看看Java继承多态经典案例. public class A { public Stri ...

  2. Java中 多态的理解

    ** Java中 多态的理解 ** 多态官方定义为: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指 ...

  3. Java继承_Hachi君浅聊Java三大特性之 封装 继承 多态

    Hello,大家好~我是你们的Hachi君,一个来自某学院的资深java小白.最近利用暑假的时间,修得满腔java语言学习心得.今天小宇宙终于要爆发了,决定在知乎上来一场根本停不下来的Hachi君个人 ...

  4. Java继承个人的理解_我对java继承的理解

    关于java继承和多态的文章已经很多了,如果你对java的继承和多态已经有很好的理解,请绕过本变文章, 如果你对java的继承和多态不是很理解,还在找寻这方面的东西,那这篇文章可能对你有所帮助. 首先 ...

  5. php父类继承子类_php有多态吗 多态都有什么好处?理解好多态往往能事半功倍...

    一.什么是多态? 多态其实就是根据参数不同而执行不同的方法. 二.php中的多态 多态的概念一般是强类型语言来谈的,因为强类型语言它必须要声明参数类型,比如一个手电筒对象的打开方法其参数申明了只能是蓝 ...

  6. JAVA中多态的理解

    Java中多态的理解 JAVA中的多态可以简单的理解为一种事物的多种形态,当然多态是在继承的基础上有重写才存在. 标题如何理解一种事物的多种形态? 举个例子,拿人类.男人.女人来说.男人.女人.都分别 ...

  7. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  8. 我爸是李刚 java_深入理解java继承从“我爸是李刚”讲起

    前言 本文主要多方面讲解java继承,旨在让初学者通俗易懂,至于"我爸是李刚",反正楼主也不知道谁爸是李刚. @ 1.继承的概述 1.1.继承的由来 至于由来简单一句话:多个类中存 ...

  9. 大数据笔记8—java基础篇4(面向对象-封装-继承-多态)

    面向对象 一.面向对象 1.面向过程 1.2.举例 1.3.总结 二.面向对象 1.简述 2.举例 3.思想特点 2.1.类的定义格式 2.1.1.简述 2.2.2.格式 2.3.3.示例 三.类的使 ...

最新文章

  1. 皮一皮:这几天最容易搞错的事情...
  2. MTD/MT/MDD/MD以及LIB/DLL之间的一些联系和问题
  3. 浏览器填写数据,跳转页面返回数据不消失
  4. Java-主方法main()的解析
  5. 国外程序员访谈:学无止境
  6. 写题10分钟,写题解8小时,一道头条面试题,真心难。
  7. 1400+款调色预设LR/PS/PR/FCPX/达芬奇lightroom滤镜LUT素材
  8. JVM07 - 方法区
  9. 万能网页视频下载教程
  10. STM32F103_DMA控制器
  11. 浮点数详解(一篇彻底学通浮点数)
  12. HDU4121 UVa1589 Xiangqi 解题报告
  13. 等红灯时使用车轱辘扫描车牌
  14. 趁你年轻快来学学如何搭建一个小说网站,这里有超详细教程,快进来看看吧,错过了可不要后悔哟。
  15. bat putty shell 连携
  16. python验证码生成器_用Python实现随机验证码
  17. matlab里面atn是什么意思,matlab教程第一章
  18. JavaScript高级编程设计(第三版)——第二章:在html中使用javaScript
  19. 用一封邮箱定位对方的位置
  20. 奥巴马就职演说中英文对照版

热门文章

  1. 静脉阻塞指标+补充笔记
  2. hbase的gui工具调研
  3. java中四种线程池的区别
  4. NameError: name 'url' is not defined django
  5. /usr/share/virtualenvwrapper/virtualenvwrapper_lazy.sh: No such file or directory解决方案
  6. sublime使用正则匹配
  7. C++编程思想:模板
  8. nginx php fpm socket,php-fpm 使用 socket 方式和 nginx 通讯,(速度优化)
  9. 驱动人生服务器版本_电脑驱动怎么装?电脑刚装系统怎么装驱动?
  10. 17:附近最大的城市