Java(三)对象类型的转换和多态机制
一 对象类型的转换
对象类型的转换在java编程中经常遇到,主要包括向上转型和向下转型。
1.向上转型
可以理解为:父类引用指向子类对象
public class TestPoly {public static void main(String[] args){Animal a = new Dog();a.shout();}
}class Animal{public void shout(){System.out.println("叫了一声");}
}class Dog extends Animal{public void shout(){System.out.println("汪汪汪");}
}class Cat extends Animal {public void shout() {System.out.println("喵喵喵喵!");}
}
其中
Animal a = new Dog();
就是向上转型,父类引用指向子类对象。这是因为狗是动物的一种,是动物的一个实例。那么可以将狗看成是动物的一个对象。
试想一下狗类对象可以作为shout()方法的参数,猫类对象也可以做shout()方法的参数,如果在动物类中的shout()方法中根据不同子类情况设置不同的处理就可以做到在父类中定义一个方方完成各个子类的功能,这样可以使同一份代码用在不同类型上,这是多态机制的基本思想。
之后将对多态进行介绍。
扩展到所有父类子类也是一个道理。
2.向下转型
通过向上转型可以推理出向下转型就是将较抽象的类转换为具体的类。
public class TestPoly {public static void main(String[] args){Animal a = new Dog();//Dog d = a;//报错。Dog d = (Dog)a;//正确}
}
将父类对象赋予子类对象,需要强制转换为子类型。简单来理解就是狗是动物,但动物不一定都是狗。父类对象不一定是子类的实例。越是具体的对象具有的特性越多,抽象的对象具有的特性越少,所以在做向下转型是将特性范围小的转换为特性范围大的对象肯定会出问题,需要将父类对象强制转换为某个子类对象,这种转换称为显示转换。
二. 多态
由向上转型原则,狗类对象可以作为shout()方法的参数,猫类对象也可以做shout()方法的参数,如果在动物类中的shout()方法中根据不同子类情况设置不同的处理就可以做到在父类中定义一个方方完成各个子类的功能,这样可以使同一份代码用在不同类型上,很好的解决代码冗余问题。
多态的实现有以下几个条件:
1.多态是方法的多态,不是属性的多态(多态与属性无关)。封装的是属性,属性全部设为private,方法全部设为public。
2.多态的存在要有3个必要条件:继承,方法重写,父类引用指向子类对象。
3.父类引用指向子类对象后,用该父类引用调用子类重写的方法,此时多态就出现了。
public class TestPoly {public static void main(String[] args){Animal a = new Animal();Animalcry(a);//Animalcry(new Animal);与上等价Animalcry(new Dog());Animalcry(new Cat());}public static void Animalcry(Animal a){//多态的条件三:父类引用指向子对对象,实现多态a.shout();}
/* 如果没有多态,我们这里需要写很多重载的方法。* 每增加一种动物,就需要重载一种动物的喊叫方法。非常麻烦。static void animalShout(Dog d) {d.shout();}static void animalShout(Cat c) {c.shout();}*/}class Animal{public void shout(){System.out.println("叫了一声");}
}class Dog extends Animal{//多态的条件一:继承public void shout(){//多态的条件二:方法的重写System.out.println("汪汪汪");}
}class Cat extends Animal {public void shout() {System.out.println("喵喵喵喵!");}
}
Java(三)对象类型的转换和多态机制相关推荐
- java中对象类型转换_Java 对象类型的转换
对象类型的转换在Java编程中经常遇到,主要分为向上转型和向下转型,但一定要记住,无论是向上转型还是向下转型,两个类之间必须有继承关系.先来看看基本概念. 向上转型又被称作自动类型转换,就是子类引用的 ...
- MySQL字段类型与Java实体类类型对应转换关系
MySQL Connector/J( MySQL官方JDBC驱动程序)在处理MySQL数据类型和Java数据类型之间的转换方面非常灵活. 通常,任何MySQL数据类型都可以转换为java.lang.S ...
- Java大对象类型的Hibernate映射
在 Java 中, java.lang.String 可用于表示长字符串(长度超过 255 ),字节数组 byte[] 可以用于存放图片户或文件二进制数据.此外,在 JDBC API 中还提供了 ja ...
- java中常见类型的转换以及方法总结
1.char.String.int类型之间的转换 1.1 char和String的区别 char是表示的是字符,定义的时候用单引号,只能存储一个字符.例如; char='d'. String表示的是字 ...
- Java三种类型之间的转换方法:Date、String、Calendar类型之间的转化
1.Calendar 转化 String //获取当前时间的具体情况,如年,月,日,week,date,分,秒等Calendar calendat = Calendar.getInstance();S ...
- instanceof应用场景 instanceof一般用于对象类型强制转换
messageConsumer.setMessageListener(new MessageListener() {@Overridepublic void onMessage(Message mes ...
- Mybatis返回类型和Java常见对象类型
点滴记录 项目开发中经常用到的: 1.resultMap 使用这个返回需要实体类和数据库字段关系映射如下面的:BaseResultMap <?xml version="1.0" ...
- java中字符类型的转换
1.如何将字符串String转化为整数int int i = Integer.parseInt(str); int i = Integer.valueOf(my_str).intValue(); 注: ...
- 【Java】int类型强制转换成long
问题 因为项目中有的地方需要转换数据类型 这次的是 Int -> Long 解决方法 Long.valueOf(int); 失败了.... (long) myInt; 失败了... Long.p ...
最新文章
- 报名 | 贝叶斯计算方法在生物制药领域的应用(基于SAS)
- TortoiseSVN SendRpt.exe not found解决方案
- OllyDbg 使用笔记 (十二)
- adapter为null_软件设计精要之——适配器(Adapter)模式
- 反射使用 非空表向空表赋值
- 利用C51单片机内部函数_corl_函数实现LED流水灯。
- win7系统服务器停止,win7系统即将停止服务,你的电脑准备好换win10 了吗?
- 啊哈添柴挑战Java1080. 请告诉我谁小?
- 超时锁定计算机,Win10电脑设置锁定屏幕超时怎么办
- 一篇带你走进Vue+阿里云的uni-app开发(HBuilder X开发版)
- java10_JAVA10 64位下载|java se development kit 10(JDK10)下载 v10.0 官方版 - 比克尔下载
- Unity基础知识汇总
- 2022年流动式起重机司机考试题库模拟考试平台操作
- 真王服务器文件,真王“时空裂变”体验申请活动开启 全新资料片十大福利盘点...
- LM13丨形态量化-动量周期分析
- Master of Phi (欧拉函数 + 积性函数的性质 + 狄利克雷卷积)
- permissions 权限
- 分布式算法 3 最大独立集
- iOS小技能: 利用UIScrollView实现图片放大预览,并支持缩小。
- 并发型服务器响应方式,Java NIO 在并发型服务器设计中的应用.pdf