我们先来看个例子:

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. nginx web服务优化

    nginx基本安全优化 1. 调整参数隐藏nginx软件版本号信息 软件的漏洞和版本有关,我们应尽量隐藏或消除web服务对访问用户显示各类敏感信息(例如web软件名称及版本号等信息),这样恶意的用户就 ...

  2. 不能调用jquery中ready里面定义的函数?

    现象:不能调用jquery中ready里面定义的函数 源码:<script type="text/javascript"> $(document).ready(func ...

  3. [C++]复制构造函数、赋值操作符与隐式类类型转换

    问题:现有类A定义如下: class A{public:        A(int a)                            //构造函数        {              ...

  4. 设计模式之——Composite组合模式

    上周面试,面试官问桥接模式是什么,我就举了个例子:手机分为苹果,小米....,每个手机都有视频,游戏...等功能.直观上是一个树形结构.这种情况下,可以用桥接模式,把手机作为接口,苹果,小米等继承手机 ...

  5. VS 2017 Region快捷键无法折叠

  6. BGP中IBGP和EBGP的区别和联系

    我们知道,在自治系统内部使用IGP路由协议:而在不同自治系统之间使用BGP路由协议(严格来讲,BGP不是路由协议).BGP产生的原因是为了在不同自治系统(AS)之间进行路由转发,而其中又提出了EBGP ...

  7. libvirt- Virsh 所有命令详单

    help            打印帮助    attach-device   从一个XML文件附加装置    attach-disk     附加磁盘设备    attach-interface 获 ...

  8. HTTP之Tcp/Ip协议的工作原理

    计算机与网络设备要相互通信,双方就必须基于相同的方法.比如,如何探测到通信目标.由哪一边先发起通信.使用哪种语言进行通信.怎样结束通信等规则都需要事先确定.不同的硬件.操作系统之间的通信,所有的这一切 ...

  9. 【290】Python 函数

    参考:Python 函数 参考:7.3 给函数参数增加元信息(增加参数的数据类型) 目录: 一.语法 二.说明 三.参数传递 四.参数 4. 1 必备参数 4.2 关键字参数 4.3 缺省参数 4.4 ...

  10. css常用属性总结第二弹:id选择器

    承接上一篇class选择器,这一篇我们来说说css的id选择器. id选择器类似于类选择器,不过也有一些重要的差别,首先,id选择器前面有一个#号----称它为棋牌号吧,class为点号,用法就和cl ...