JAVA_SE基础——49.多态的应用
因为多态对以后开发的重要性,因此我在这里专门开个多态的应用来加深讲解,希望想弄懂多态的同学能耐心看完。
了解了对象多态性后,那么这多态到底有哪些用处了? 下面要求设计一个方法,要求此方法可以接受A类的任意子类对象,并调用方法,此时,如果不使用对象多态性,那代码肯定会类似code1。
code1(不使用对象多态性实现功能)
class A{ // 定义类A
public void Run1(){ // 定义Run1()方法
System.out.println("A类----Run1方法") ;
}
public void Run2(){
Run1() ; // 调用父类的Run1()方法
}
}
class B extends A{
public void Run1(){ // 覆写父类中的Run1方法
System.out.println("B类----Run1方法") ;
}
public void Run3(){ // B类特有的方法
System.out.println("B类----Run3方法") ;
}
}
class C extends A{
public void Run1(){ // 覆写父类中的Run1方法
System.out.println("C类----Run1方法") ;
}
public void Run5(){ // C类特有的方法
System.out.println("C类----Run5方法") ;
}
}
public class Demo6{
public static void main(String asrgs[]){
Run(new B()) ; // 传递B类的实例 B b = new B();
Run(new C()) ; // 传递C类的实例 C c = new C();
}
public static void Run(B b){
b.Run1() ; // 调用覆写父类中的Run1()方法
}
public static void Run(C c){
c.Run1() ; // 调用覆写父类中的Run1()方法
}
}
运行结果:
以上code1代码虽然实现了基本的要求,但是你们应该可以发现:如果按照code1的方式完成程序,这就相当于产生了一个A类的子类时,Run()方法就要重载一次,则每一次扩充子类都要修改类本身,这样肯定不太好,那么如果使用对象多态性完成呢?具体代码如code2。
code2(使用对象多态性实现功能)
class A{ // 定义类A
public void Run1(){ // 定义Run1()方法
System.out.println("A类----Run1方法") ;
}
public void Run2(){
Run1() ; // 调用父类的Run1()方法
}
}
class B extends A{
public void Run1(){ // 覆写父类中的Run1方法
System.out.println("B类----Run1方法") ;
}
public void Run3(){ // B类特有的方法
System.out.println("B类----Run3方法") ;
}
}
class C extends A{
public void Run1(){ // 覆写父类中的Run1方法
System.out.println("C类----Run1方法") ;
}
public void Run5(){ // C类特有的方法
System.out.println("C类----Run5方法") ;
}
}
public class Demo6{
public static void main(String asrgs[]){
Run(new B()) ; // 传递B类的实例,产生向上转移
Run(new C()) ; // 传递C类的实例,产生向上转移
}
//接收父类对象
public static void Run(A a){//相当于 A a = new B() & A a = new C()
a.Run1() ; // 调用覆写父类中的Run1()方法
} }
运行结果:
上面code2代码中在Run()方法中使用了对象的多态性,所以可以接收任何子类的对象,这样无论子类如何增加,Run()方法都不用做任何的改变,因为发生了对象的向上转型关系后,调用的方法一定是被子类覆写过的方法。
JAVA_SE基础——49.多态的应用的更多相关文章
- JAVA_SE基础——48.多态
面向对象程序设计的三个特点是封装.继承和多态.前面已经学习了前两个特点.本章节将介绍多态性. 多态:一个对象具备多种形态.(父类的引用类型变量指向了子类的对象)或者是接口 的引用类型变量指向了接口实现 ...
- JAVA_SE基础——26.[深入解析]局部变量与成员变量的区别
黑马程序员入学blog ... 如果这章节很难懂的话应该返回去先看 JAVA_SE基础--10.变量的作用域 定义的位置上区别: 1. 成员变量是定义在方法之外,类之内的. 2. 局部变量是定义在方 ...
- JAVA_SE基础——9.基本数据类型间的转换
前面我已经教会大家基本的数据类型进行了介绍, 然后这篇文章,我来介绍下,基本数据类型的转换. Java中有两种类型转换形式,分别是自动类型转换和强制类型转换. Step1.自动类型转换. 自动类型 ...
- JAVA_SE基础——8.基本数据类型
基本数据类型有:整数类型.浮点类型.字符类型.布尔类型 整数类型 整数类型用来存储整数数值,即没有小数部分的数值.与C.C++语言相同,整数在Java语言中有3种表示形式:十进制.八进制和十六进制. ...
- JAVA_SE基础——7.常量&变量
上一篇,我讲了标识符&关键字 这篇我来解释下变量&常量~~~ 变量与常量这两个概念相信大家都不会感到陌生,在数学中就已经涉及了变量与常量.理解变量与常量,可以举这样一个例子: 例 ...
- JAVA_SE基础——6.标识符&关键字
学会写helloworld之后, 我们就开始来认识标识符&关键字 一.标识符 标识符是指可被用来为类.变量或方法等命名的字符序列,换言之,标识符就是用户自定义的名称来标识类.变量或方法等.更 ...
- JAVA_SE基础——5.第一个Java程序HelloWorld&注释的应用
配置完JDK&环境变量后,我们就可以开始写程序了,那么程序怎么写呢,用什么工具呢,我建议 为了方便学习,我们最好在一个磁盘下建立一个专门的文件来写java程序,比如就在D盘下建立一个名为&qu ...
- JAVA_SE基础——4.path的临时配置&Classpath的配置
这次,我来写下关于path的临时配置的心的 我来说个有可能的实例:如果你去到别人的电脑 又想写代码 又不想改乱别人的path配置的话 再说别人愿意你在别人的电脑上瞎配吗? 那该怎么办呢? 那没问题 ...
- JAVA_SE基础——2.环境变量的配置&测试JDK
哈喽,利用晚上的空余时间再写篇心的~~~ 谢谢大家 前一篇文章 JAVA_SE基础--JDK&JRE下载及安装http://blog.csdn.net/thescript_j/article ...
随机推荐
- [BZOJ1503] [NOI2004] 郁闷的出纳员 (treap)
Description OIER公司是一家大型专业化软件公司,有着数以万计的员工.作为一名出纳员,我的任务之一便是统计每位员工的工资.这本来是一份不错的工作,但是令人郁闷的是,我们的老板反复无常,经常 ...
- 【BZOJ2693】jzptab
Time Limit: 5000 ms Memory Limit: 512 MB description 给你\(n, m\),求\(\sum\limits_{i=1}^{n}\sum\limits_ ...
- libpqxx接口的在linux下的使用,解决psql:connections on Unix domain socket "/tmp/.s.PGSQL.5432"错误
在项目中使用postgresql数据库时要求在windows和linux双平台兼容.于是在windows下使用的接口在linux下爆出异常: psql:connections on Unix doma ...
- Loadrunner 11在win7录制中失败“the recording of the application was terminated by windows due to window data execution prevention feature"
在录制过程中遇到如下问题: 查了下如何Enable, Disable Data Execution Prevention (DEP) in Windows 10/8/7 (http://www.the ...
- Python 3.6.4 / win10 使用pip安装keras时遇到依赖的PyYAML安装出错
PS C:\Users\myjac\Desktop\simple-chinese-ocr> pip install keras Collecting keras Downloading http ...
- parted分区和挂载及非交互式操作
author : headsen chen date : 2017-11-17 09:45:36 个人原创,转载请注明作者,出处,否则依法追究法律责任 1,将磁盘上原有的分区删除掉: 进入:#pa ...
- 来自后端的突袭? --浅尝最新开源的C# Web引擎 Blazor
在今年年初, 恰逢新春佳节临近的时候. 微软给全球的C#开发者们, 着实的送上了一分惊喜. 微软正式开源Blazor ,将.NET带回到浏览器. 这个小惊喜, 迅速的在dotnet开发者中间传开了. ...
- 关于embed的一些使用兼容
因公司需求,要做一个扫描语音播报的功能,所以用到一些音频/视频标签 考虑到 <embed> 标签对于ie的兼容性更好一些所以,我在这采用了 <embed> 标签 ...
- 用three.js创建一个简易的天空盒
本文创建的天空盒是用六张图片来创建的.笔者会论述两种方法来创建,都是最简单基本的方法,不涉及着色器的使用.一种是创建一个盒子,然后将图片作为盒子6个面的纹理贴上来创建.另一种则是简单的将纹理作为场景的 ...
- C语言第七次博客作业--一二维数组
一.PTA实验作业 题目1:找鞍点 1. 本题PTA提交列表 2. 设计思路 定义n,i,j,ii,jj,a[7][7],flag,max 输入n for i=0 to i=n for j=0 to ...