Day04.a(对象类型的转换,多态)
对象类型的转换
Dog dog = new Dog();
通常情况下,对象(new Dog())类型和引用(dog)类型是相同的,当引用类型和对象类型不一致时,就需要类型转换。
向上转型:将较具体的类转换为较抽象的类。(子类对象-> 父类对象)即把子类对象赋值给父类类型的变量。安全。
这样可以做到在父类中定义一个方法完成各个子类的功能,使同一份代码无差别运用到不同类型之上。这是多态机制的基本思想。
向下转型:将较抽象的类转换为较具体的类。(父类对象 -> 子类对象)但是如果将父类对象直接赋予子类,会出现编译器错误。所以必须使用显示类型转换,向编译器指明将父类对象转换为哪一种类型的子类对象。 不安全。
使用操作符instanceof判断父类对象是否为子类对象的实例,返回值为boolean类型。
方法重载
方法重载是为了让方法名相同而形参不同的构造方法同时存在
不定长参数方法: 返回值 方法名(参数数据类型 ... 参数名称)
int add(int ... a) 这个不定长参数a是一个数组,编译器将int...a看成int[]a。
多态
多态可以使程序具有良好的扩展性,并对所有类对象进行通用的处理
Java中多态性表现:
方法的重载和重写
可以用父类的引用指向子类的具体实现,而且可以随时更换为其它子类的具体实现。
//创建一个Animal类1 public class Animal {
String name;
public void say() {
System.out.println("I am an animal.");
}
}
建立一个Dog类继承Animal类,并重写say()方法
1 public class Dog extends Animal {
public void say() {
System.out.println("I am a dog.");
}
public void yell() {
System.out.println("Bowl,Bowl,Bowl.")
}
}
建立Cat类继承Animal类,重写say()方法
1 public class Cat extends Animal {
public void say() {
System.out.println("I am a Cat .");
}
public void yell() {
System.out.println("Meow, Meow, Meow.")
}
}
public class Text {
public static void main(String[] args) {
Dog dog = new Dog();
dog.say();
dog.yell();
Cat cat = new Cat();
cat.say();
cat.yell();
}
}
输出:I am a dog.Bowl, Bowl, Bowl.I am a cat.Meow, Meow, Meow
public class Text2 {
public static void main(String[] args) {
Animal dog = new Dog(); //向上类型转换,使用父类的引用指向子类对象
dog.say();
dog.yell(); //报错。The method yell() is undefined for the type Animal,因为dog引用是Animal类型,使用强制类型转换修正((Dog) dog).yell();
Animal cat = new Cat();
cat.say();
cat.yell(); //报错。
}
}
public class Text3 {
//创建静态方法doSomething方法(在main方法中可以直接调用),使用instanceof关键字,解决Text2中的错误
public static void doSomething(Animal animal) {
animal.say();
if (animal instanceof Dog) {
((Dog) animal).yell();
} else if (animal instanceof Cat) {
((Cat) animal).yell();
}
}
public static void main(String[] args) {
doSomething(new Dog()); //直接创建对象后调用静态方法
doSomething(new Cat());
}
}
输出:I am a dog.Bowl, Bowl, Bowl.I am a cat.Meow, Meow, Meow
Day04.a(对象类型的转换,多态)的更多相关文章
- java 对象类型的转换
import com.java.charpt05.NewStr; class Quadrangle{ public static void draw(Quadrangle q) { ...
- 我的Java历程_Java对象类型的转换
向上转型: 可以将子类对象看作是父类对象叫做“向上转型”,由于向上转型是从一个较为具体的类向较为抽象的类的转换,所以它总是安全的. 例如:可以将正方形.长方形叫做是四边形,但是不能说四边形是正方形或长 ...
- json格式和对象类型的转换20170330
(1)对象的类型转换成字符串类型(或者更确切的说是json类型的) JSONObject jo = JSONObject.fromObject(map);常见的java代码转换成json 比如:后台J ...
- 分享:根据svg节点对象类型和路径值转换坐标值
功能用处: 对svg文件的路径节点填充时会使用(相邻两个坐标区域内的四边形的填充颜色不重复). 需要对svg文件中的Path节点或者 Polyline 节点做颜色填充.并且相邻的两个区域之间的颜色不允 ...
- php中对象类型与数组之间的转换
1.刚看视频学习的时候看到一个困扰很久的问题, 有时候我们在进行做项目的时候会碰到的一个小问题.举一个小例子. 获取一个xml文件里面的数据. xml.xml文件如下: <?xml versi ...
- Redis对象类型
Redis对象类型 Redis基于基础的数据结构创建的对象: 字符串对象. 列表对象. 哈希对象. 集合对象 有序集合对象. 对象回收:Redis对象系统实现了基于引用计数技术的内存回收机制,当程序不 ...
- 一文读懂Redis常见对象类型的底层数据结构
Redis是一个基于内存中的数据结构存储系统,可以用作数据库.缓存和消息中间件.Redis支持五种常见对象类型:字符串(String).哈希(Hash).列表(List).集合(Set)以及有序集合( ...
- C#高级编程笔记 2016年10月8日运算符和类型强制转换
1.checked和unchecked 运算符 C#提供了checked 和uncheckde 运算符.如果把一个代码块标记为checked, CLR就会执行溢出检查,如果发生溢出,就抛出overfl ...
- JS 之Blob 对象类型
原文 http://blog.csdn.net/oscar999/article/details/36373183 什么是Blob? Blob 是什么? 这里说的是一种Javascript的对象类型. ...
随机推荐
- 代码管理git 工具的话可以使用GitHub桌面端管理git、码云上的代码
git版本控制 廖雪峰老师的git教程 git是linus 1991年创建了开源的linux...已成为最大的服务器系统软件 集中式的版本控制器:CVS.SVN.ClearCase是IBM的收费软件 ...
- C博客作业01--分支、顺序结构
1.本章学习总结 1.1 思维导图 1.2 本章学习体会及代码量学习体会 1.2.1 学习体会 在暑假已经有初步接触c语言,所以在学习c语言的开始会比较轻松,但仍然解题时候步骤太过于繁琐,简单的题目复 ...
- Ubuntu 16.04 安装opencv3.4.5/cuda/caffe并使用jni笔记
因操作失误,误卸开发机NVIDIA显卡驱动,先更新操作日志如下: 1>NVIDIA驱动重装 1.卸载系统里的Nvidia残余 sudo apt-get purge nvidia* 2.把显卡驱动 ...
- luogu4166 最大土地面积 (旋转卡壳)
首先这样的点一定在凸包上 然后旋转卡壳就可以 具体来说,枚举对角线的一个端点,另一个端点在凸包上转,剩下两个点就是一个叉积最大一个最小,而这两个点也是跟着转的 所以是$O(N^2)$ #include ...
- python sorted函数多条件排序是怎么回事
首先,要知道sorted 内部实现使用了归并排序,而归并排序是稳定的排序,就是说当元素比不出大小时,其相对位置是不变的. 那么,利用稳定排序的特性,key函数有几个返回值就排序几次,先排序次要条件,后 ...
- 文件上传XSS引发的安全问题
文件上传xss,一般都是上传html文件导致存储或者反射xss 一般后缀是html,之前疏忽了,没怎么考虑文件上传xss 如果没有 验证文件内容,却验证了后缀的情况下,使用: htm后缀: 测试代码: ...
- ElasticSearch常用操作命令
查看系统信息: curl 'http://username:password@192.168.0.40:9200/' curl 'http://username:password@127.0.0.1: ...
- 码云报错:fatal: remote origin already exists.解决方法
今天在提交Git的时候,遇到了几个问题,记录一下,方便以后查找O(∩_∩)O 第一个问题 git remote add origin************** fatal: remote origi ...
- MySQL数据转移至SQL Server详解
最近有个活是mysql数据转移到sql server 2012,直接手动转工作量太大,发现网上有工具教程,则记录一下. 一.安装MySQL ODBC驱动为MySQL安装Connector/ODBC驱动 ...
- EF Code First关系规则及配置
1.一对多关系 关系表: Category 分类表 Product 产品表 分类与产品之间的一对多关系 1>.产品实体类不指定外键属性 Domain中类定义: Category.cs 1 usi ...