java 面向对象的多态性——向上转型与向下转型
目录
类定义了之后需要被调用定义对象才能执行。
在前几篇中讨论了抽象类和接口,其中抽象方法是对这样的动作的抽象描述:动作名称相同,但不同类别具体执行动作的内容不同。
如:人类有“工作”这一动作,而学生继承自人类,学生也有“工作”,其工作内容就是学习。但是学生也有自己独有的动作,比如考试。老师也继承自人类,老师的工作是教书,而其独有的方法是备课。
在学校里随便拉一个人问:你的工作是什么?不同的人针对这同一问题,有不同的回答。
学生听到,会回答他的工作是学习,考试等等。
老师听到,会回答他的工作是教书,备课等等。
如何针对同一问题,不同的受访者由共性动作答出不同内容,又有各自独有的动作?
可以归结为如下代码:
class People
{People(){System.out.println("I'm a man");}void work(){System.out.println("I'm working!");}
}class Student extends People
{Student(){System.out.println("I'm a student");}void examming(){System.out.println("examming");} void work(){System.out.println("I'm studying");}
}class Teacher extends People
{Teacher(){System.out.println("I'm a teacher");}void preparedLessons(){System.out.println("preparedLessons");} void work(){System.out.println("I'm teaching");}
}class ExtendsDemo
{public static void showWorking(People p){p.work();if(p instanceof Student){Student s=(Student)p;s.examming();}if(p instanceof Teacher){Teacher teacher=(Teacher)p;teacher.preparedLessons();}}public static void main(String[] args) {People p=new People();System.out.print("形参为人类,实参为父类:");showWorking(p);Student s=new Student();System.out.print("形参为人类,实参为学生:");showWorking(s);Teacher teacher=new Teacher();System.out.print("形参为人类,实参为老师:");showWorking(teacher); }
}
记者在采访之前并不知道此人的职业,所以输入都为人类,只有受访者开口说话之后,才能确定他的工作内容。
形参为父类,实际传入参数为子类对象,即父类引用指向子类对象。这种情况就叫向上提升。
在函数体中,父类引用调用共有方法,实际执行的是实际传入的子类对应的方法。
当具体到不同的人时,他们有各自不同的独有的动作,这时,根据实际传入的对象参数类型,将父类类型作对应类型的强制类型转换。此时叫向下转型。
总结:
- 无论是否为抽象方法,在父类引用指向子类对象时,父类引用调用共有方法,实际执行子类方法
- 在父类引用指向子类对象时,父类引用调用子类独有方法,报错
- 那如何通过父类的引用调用子类的独有方法呢?
向下转型 将父类引用强制类型转换为子类,然后通过子类调用子类的独有方法。 - 需要特别注意的是,多态只适用于方法,而不是用于属性。即如果父类和子类有同名属性,调用哪个对象的属性,实际就执行哪个对象的属性。
java 面向对象的多态性——向上转型与向下转型相关推荐
- Java 面向对象编程(三)——多态,方法重写,向上转型,向下转型
所谓多态,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪 ...
- 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
–本文摘要– 1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者. 2.本文的内容摘要:讲述Java中的一 ...
- Java中向上转型与向下转型
面向对象的三大特征:封装.继承.多态 在讲多态前先了解一些关于继承的Java基础知识: *继承:就是一个类(该类被称为子类)可以继承另一个类(该类被称为父类). *继承"基本"作用 ...
- 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型
学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...
- Java转型(向上转型和向下转型)
在Java编程中经常碰到类型转换,对象类型转换主要包括向上转型和向下转型. 5.13.1 向上转型 我们在现实中常常这样说:这个人会唱歌.在这里,我们并不关心这个人是黑人还是白人,是成人还是小孩,也就 ...
- 【转】面向对象之多态(向上转型与向下转型)
转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...
- [JAVA]向上转型与向下转型
要理解多态性,首先要知道什么是"向上转型"."向下转型". 对象的多态性:父子类对象的转换 **向上转型:**子类对象变为父类对象,语法: 父类 父类对象 = ...
- Java中的向上转型及向下转型
我们都知道Java的三大特性:封装.继承.多态. Java中的向上转型及向下转型体现了Java中的继承性及多态性,所谓继承,不难理解,存在于子父类间,子类继承父类中不被私有化的属性和方法.而多态性,顾 ...
- java 泛型向下转型_Java向上转型和向下转型(附具体样例)
Java向上转型和向下转型(附具体样例) 熬夜整理的关于Java向上和向下转型的样例,很的通俗易懂哦~~~~ 一.向上转型 package com.sheepmu; class Animal { pu ...
最新文章
- mahout基于Hadoop的CF代码分析(转)
- 旧访客设计模式的新生活
- 计算机网络课程计划,计算机网络教学计划2017
- Laynews内核仿阿怪资源娱乐网源码
- Haven Protocol为公共测试网xAsset推出新浏览器
- AngularJS 学习笔记 (六) 基本概念和用法 之 Service与Provider
- 每日英语:Why Food Companies Are Fascinated by the Way We Eat
- ArcGIS模型操作
- Liunx 项目部署及域名访问
- windows自带黑体_window自带字体
- 【Java常见异常】InaccessibleObjectException异常处理方法
- 9080端口对应服务器文件位置,Filenet更改端口-更改9080 端口到 80 端口
- 逻辑表达式在c语言中作用,C语言中逻辑表达式与关系表达式的值
- Chrome浏览器启动参数大全(命令行参数)
- python实现网页截图功能——学习篇(01)
- ChatGPT会砸了谷歌的饭碗吗?(附彩蛋)
- NAO机器人连接的电脑配置及用choregraphe控制nao行走
- 实时数据同步利器debezium教程
- 解决GitHub conle卡顿(曲线救国)
- Qt信息隐藏(Q_D/Q_Q)介绍