1.为什么向上转型?

所谓多态,也即向上转型,就是某个对象的引用视为对其基类的引用,编译对象是基类,运行对象是父类。向上转型的对象由于Java后期绑定的特点,若父类重写了基类中的方法,则它调用的是父类中的方法,其余调用的是基类中的方法。通过多态,我们可以减少代码的冗余,当多个类继承某个基类时,我们希望引用对象调用他们自身的方法,这时只需要写出一条基类的对象引用即可。

2.代码实现

class A{void a(){System.out.println("A:a()");b();};void b(){System.out.println("A:b()");}
}
public class Oos extends A{void b(){System.out.println("B:b()");}public static void main(String args[]){A test=new Oos();test.a();}
}

这个例子中,test即为向上转型的对象,它调用a()方法时,因为子类中没有a()方法,所以调用的是父类的a()方法,在父类a()方法中,又调用了本身的b()方法,而它在子类Oos中有重写过,因此调用的是子类中的b()方法。输出如下所示:

3.缺陷

(1)只有非private方法才能覆盖,因为private默认为final类型,当父类中的方法为private时,子类中的非private同名方法视为全新的方法,后期不会绑定它父类中的方法。代码如下;

class A{void a(){System.out.println("A:a()");b();}private void b(){System.out.println("A:b()");}
}public class Oos extends A{public void b(){System.out.println("B:b()");}public static void main(String args[]){A test=new Oos();test.a();}
}

结果为:

(2)对于基类和父类的数据成员,向上转型对象不会覆盖数据成员,代码如下:

class A{int i=0;void a(){System.out.println("A:a() i="+i);b();};void b(){System.out.println("A:b()");}
}public class Oos extends A{int i=1;void b(){System.out.println("B:b() i="+i);}public static void main(String args[]){A test=new Oos();test.a();}
}

结果为:

可以看到B中覆盖的方法中i的值还是自己类中的值,不会覆盖数据成员。

(3)静态方法方法不具有多态性,因为静态方法在编译前就已被初始化,不具有后期绑定的特点。代码省略。

Java中多态(向上转型)机制相关推荐

  1. Java中的向上转型及向下转型

    我们都知道Java的三大特性:封装.继承.多态. Java中的向上转型及向下转型体现了Java中的继承性及多态性,所谓继承,不难理解,存在于子父类间,子类继承父类中不被私有化的属性和方法.而多态性,顾 ...

  2. 什么是多态,JAVA 中多态的实现机制

    什么是多态,JAVA 中多态的实现机制 首先声明啊,这里的多态不是生物学和物理学上的多态性,这个是指编程语言中的多态. 官方说明: 多态(英语:polymorphism)指为不同数据类型的实体提供统一 ...

  3. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  4. Java接口,多态,向上转型,向下转型的意义

    接口 官方解释: Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现 ,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 包含 ...

  5. JAVA中的向上转型和向下转型

    一.向上转型和向下转型 向上转型和向下转型是在JAVA继承操作中用到的东西,在讲到转型之前我们需要认识到继承过程中的对象类型转换,这种转换有两个特点:              1.这是继承过程中发生 ...

  6. 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型

    学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...

  7. java中多态_java之多态

    1.多态的概述:是面向对象的三大特性之一,封装.继承.多态. ①一个具体的对象有多种形态,老虎既属于猫科动物(因为子父类是相对的,所以猫科动物也可以看做子类),又属于哺乳动物,所以老虎既可以拥有猫科动 ...

  8. Java中多态的使用

    1.面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 2.多态的定义:指允许不同类的对象对同一消息做出响应.即同一消息 ...

  9. Java中的等待/通知机制(wait/notify)

    为什么80%的码农都做不了架构师?>>>    当一个线程修改了一个对象的值,另外一个线程需要感知到这个变化,并且做出相应的操作时,可以使用Java中的等待/通知机制去实现这个功能. ...

  10. Java中 多态的理解

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

最新文章

  1. Effective C++ item01 尽量以const enum inline替换#define
  2. Spring Cloud Alibaba 服务门户:Spring Cloud Gateway 如何把好微服务的大门
  3. java build.gradle 详解_java – Gradle构建失败[无法解析配置的所有依赖项’:compile’.]...
  4. Python PhantomJS 爬虫 示例
  5. Oracle:select into 查询没有记录的解决办法
  6. 基于密度的异常值检测方法整理
  7. 利用伸展树提高区间操作的性能
  8. 在VC++中访问和修改系统注册表
  9. VS2008+Qt 项目目录
  10. mysql搜索结果去重_MySQL去除查询结果重复
  11. python命令行参数解析模块argparse和docopt
  12. C语言开发《浪漫流星雨》表白程序,去年已经成功了
  13. Linux内核4.14版本——alsa框架分析(3)-PCM设备的创建
  14. 4565: [Haoi2016]字符合并 区间DP
  15. 一起来看看阿里开源的15个顶级Java项目
  16. Android平台和java平台DES加密解密互通程序及其不能互通的原因(转)
  17. 显卡内存足够但是torch报错RuntimeError: CUDA out of memory
  18. 新乡学院计算机主任教研室,新乡学院关于开展教研室之间互评互学活动方案
  19. java卸载错误2503_修复控制面板卸载程序时提示错误代码2502、2503的方法
  20. MNN C++输入图片多通道

热门文章

  1. oracle 数据 时间间隔,如何掌握 Oracle 中的时间间隔型数据
  2. JSR311发布Restful WebService工程
  3. 化工原理第四版课后习题答案
  4. mysql my.cnf key_buffer_size_mysql5.6之key_buffer_size优化设置-阿里云开发者社区
  5. 关于数据库插入中文乱码问题
  6. 多样性文本生成任务的研究进展
  7. 大规模计算时代:深度生成模型何去何从
  8. POJ2195 Going Home 最小费用最大流
  9. java全文检索的框架_lucene框架全文检索搜索引擎方案
  10. 【MyBatis使用】 mapper文件未编译 + statementType使用 + 返回结果字段顺序不一致 + 获取自增ID + 一个update标签批量更新记录