我们先来看个例子:

public class Polymorphism  extends BaseClass{

	    public String book="轻量级j2ee教程";

	    public void sub()
{
System.out.println("子类的普通方法");
}
public void test()
{
System.out.println("子类覆盖父类的方法!");
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
BaseClass base=new BaseClass();
System.out.println(base.book);
base.test();
base.base(); Polymorphism subclass=new Polymorphism();
System.out.println(subclass.book);
subclass.test();
subclass.sub(); //test是上转型对象
BaseClass test=new Polymorphism(); //通过引用类型访问变量,只会访问到编译时类型定义的变量,而不会访问执行时定义的变量
System.out.println(test.book); /**
* test对象的引用类型是BaseClass 但是执行类型是Polymorphism
* 编译阶段只能调用其编译类型所具备的方法,但是运行时则执行它运行时类型所具有的方法
*/ test.base(); //子类没有对应的方法(实际上子类已经继承了父类的base方法),直接调用父类的base方法
test.test(); //子类有覆盖父类的test方法,执行时,直接调用子类的test方法
}
}
class BaseClass
{
public int book=6;
public void base()
{
System.out.println("父类的普通方法");
}
public void test()
{
System.out.println("父类被覆盖的方法!");
}
}

执行结果:
6
父类被覆盖的方法!
父类的普通方法
轻量级j2ee教程
子类覆盖父类的方法!
子类的普通方法
6
父类的普通方法
子类覆盖父类的方法!

从上面的例子可以看出:

对于上转型对象test这个引用类型而言:存在两种类型情况(1,编译时类型   2,运行时类型)

诚然:在编译时,test是BaseClass类型,但是在运行时test是Polymorphism 类型。

对于这种上转型变量而言:在编译的过程中,他只会调用BaseClass中的方法,但是运行时,他会调用Polymorphism 中的方法(包括从父类继承的方法)!

这种上转型,也是多态中的一种!

啥叫多态??

相同类型的变量,调用同意方法时呈现出不同的行为特征,这就会多态(最经常接触的就是:统一方法名,对应不同的参数个数或者参数类型)

java中的上转型解释(多态的另一种)的更多相关文章

  1. java中的上转型对象

    1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 通俗的说 ...

  2. [转帖]Java中重写和重载与多态的关系

    Java中重写和重载与多态的关系 2019-09-05 00:57:41 留下一天今天 阅读数 67  收藏 更多 分类专栏: java进阶之路   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  3. Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】

    转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...

  4. java中的自动转型的学习理解

    java当中的继承是和c++中的继承类似,只是java中的继承时的父类只能有一位. 我们今天在这里讲的是关于java中的自动转型的理解:顾名思义,自动转型值得就是使用时自动的将自身的类型进行转化. 自 ...

  5. Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式

    Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...

  6. 【Java基本功】一文了解Java中继承、封装、多态的细节

    本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...

  7. Java中 接口是如何实现多态的特性的

    Java中多态是个很难理解的概念,但同时又是非常重要的概念,Java三大特性(封装.继承.多态)之一,我们从字面上理解,就是一种类型的多种状态,一下通过卖小汽车的例子再次说明什么是多态,其中利用到了接 ...

  8. Java中的final具体解释以及用途实战

    浅析Java中的finalkeyword 谈到finalkeyword,想必非常多人都不陌生.在使用匿名内部类的时候可能会经经常使用到finalkeyword. 另外.Java中的String类就是一 ...

  9. java中封装,继承,多态,接口学习总结

    ### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通 ...

随机推荐

  1. window 2003 实现多用户远程登录

    1.单击开始->运行,输入gpedit.msc,打开组策略编辑器,找到计算机配置 ->管理模版 -> Windows组件 ->终端服务.把限制连接数量的属性修改成我们需要的数字 ...

  2. ORA-01146: cannot start online backup - file 1 is already in backup ORA-01110: data file 1: 'C:\ORACLE\ORADATA\ORCL8\SYSTEM01.DBF'

    问题: Error: [1146] ORA-01146: cannot start online backup - file 1 is already in backup ORA-01110: dat ...

  3. Angular.js中处理页面闪烁的方法详解

    Angular.js中处理页面闪烁的方法详解 前言 大家在使用{{}}绑定数据的时候,页面加载会出现满屏尽是{{xxx}}的情况.数据还没响应,但页面已经渲染了.这是因为浏览器和angularjs渲染 ...

  4. 跟我一起学kafka(一)

    从昨天下午接到新任务,要采集一个法院网站得所有公告,大概是需要采集这个网站得所有公告列表里得所有txt内容,txt文件里边是一件件赤裸裸得案件,记录这案由,原告被告等相关属性(不知道该叫什么就称之为属 ...

  5. python开发_python中的module

    在python中,我们可以把一些功能模块化,就有一点类似于java中,把一些功能相关或者相同的代码放到一起,这样我们需要用的时候,就可以直接调用了 这样做的好处: 1,只要写好了一个功能模块,就可以在 ...

  6. SVN版本控制系统最佳实践

    第1章SVN介绍及应用场景 1.1什么是SVN(Subversion) Svn(subversion)是近年来崛起非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统. ...

  7. git submodule一些操作

    checkout指定tag cd /path/to/yoursubmodule git checkout yourTag cd .. git add yoursubmodule git commit ...

  8. 5.Redis 发布订阅

    转自:http://www.runoob.com/redis/redis-tutorial.html Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub ...

  9. 利用maven实现差异化配置

    回顾过去 生产环境,测试环境,开发环境在不同的环境下会有各种各样的配置,比如数据库链接地址,账户名,密码等等.不同环境下都需要配置,但是配置却又不同.以前分享过一篇文章,介绍了我之前A公司的差异化配置 ...

  10. 4.Hadoop集群搭建之启动

    配置好Hadoop.HDFS.YARN.Zookeeper集群后,需要按照顺序启动. 前期准备 配置好Hadoop.HDFS.YARN.Zookeeper集群 先stop掉所有的hadoop服务 使用 ...