java中的上转型解释(多态的另一种)
我们先来看个例子:
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中的上转型解释(多态的另一种)的更多相关文章
- java中的上转型对象
1. 定义 如果B类是A类的子类或间接子类,当用B类创建对象b并将这个对象b的引用赋给A类对象a时,如: A a;a = new B();ORA a;B b = new B();a = b; 通俗的说 ...
- [转帖]Java中重写和重载与多态的关系
Java中重写和重载与多态的关系 2019-09-05 00:57:41 留下一天今天 阅读数 67 收藏 更多 分类专栏: java进阶之路 版权声明:本文为博主原创文章,遵循CC 4.0 B ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】
转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...
- java中的自动转型的学习理解
java当中的继承是和c++中的继承类似,只是java中的继承时的父类只能有一位. 我们今天在这里讲的是关于java中的自动转型的理解:顾名思义,自动转型值得就是使用时自动的将自身的类型进行转化. 自 ...
- Java进阶(四十二)Java中多线程使用匿名内部类的方式进行创建3种方式
Java中多线程使用匿名内部类的方式进行创建3种方式 package cn.edu.ujn.demo; // 匿名内部类的格式: public class ThreadDemo { public st ...
- 【Java基本功】一文了解Java中继承、封装、多态的细节
本节主要介绍Java面向对象三大特性:继承 封装 多态,以及其中的原理. 本文会结合虚拟机对引用和对象的不同处理来介绍三大特性的原理. 继承 Java中的继承只能单继承,但是可以通过内部类继承其他类来 ...
- Java中 接口是如何实现多态的特性的
Java中多态是个很难理解的概念,但同时又是非常重要的概念,Java三大特性(封装.继承.多态)之一,我们从字面上理解,就是一种类型的多种状态,一下通过卖小汽车的例子再次说明什么是多态,其中利用到了接 ...
- Java中的final具体解释以及用途实战
浅析Java中的finalkeyword 谈到finalkeyword,想必非常多人都不陌生.在使用匿名内部类的时候可能会经经常使用到finalkeyword. 另外.Java中的String类就是一 ...
- java中封装,继承,多态,接口学习总结
### 一:封装java中封装是指一种将抽象性函式接口的实现细节部分包装.隐藏起来的方法. 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问.要访问该类的代码和数据,必须通 ...
随机推荐
- ubuntu16.04让内核编译一次过的方法
问题: 进入内核后,发现make menuconfig 出错,而且在在网上找到的一些安装包,安装结束后,发现make menuconfig后的图形界面虽然出来了,但是图形界面里的内容没有出来! 解决方 ...
- 3d标签云(JS版)
http://www.miaov.com/miaov_demo/3dLable/miaov_demo.html http://www.lijian.net/p/windstagball/index.h ...
- App切图命名规范
转自:http://www.uisdc.com/slice-rename-in-ui-design(略有修改) 关于切图命名的规范,我个人觉得关键是在于团队能够有一个统一的规则,所有成员严格遵守并且和 ...
- linux rz 乱码
Linux shell rz和sz是终端下常用的文件传输命令,rz和sz通过shell被调用,其中rz用于从启用终端的系统上传文件到目标系统(终端登录的目标系统), 这里不过多介绍这些命令,只是记录一 ...
- C语言学习笔记---好用的函数memcpy与memset
这个主要用于我个人的学习笔记,便于以后查询,顺便分享给大家. 想必在用C的时候难免会与数组,指针,内存这几样东西打交道,先以数组为例,例如有一个数组int a[5] = {1, 2, 3, 4, 5} ...
- 爬虫中urllib库
一.urllib库 urllib是Python自带的一个用于爬虫的库,其主要作用就是可以通过代码模拟浏览器发送请求.其常被用到的子模块在Python3中的为urllib.request和urllib. ...
- sudo:must be setuid root 解决方法 <转>
http://walkerqt.blog.51cto.com/1310630/1354103
- nginx基本配置与参数说明-【转】
#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...
- 服务器报警邮件发送到QQ邮箱,但是被系统拦截
# 为啥发送到QQ邮箱呢?因为QQ邮箱可以和微信关联,第一时间收到消息 if 没有设置白名单,然后被拦截当做垃圾邮件了: 设置白名单就可以了,这样的状态特征是: 邮件在垃圾箱里面能找到 elif 还是 ...
- 怎样获取datagrid中编辑列combobox的value值与text值
var ed = $('#dg').datagrid('getEditor', {index:editIndex,field:'productid'}); var productname = $(ed ...