Java 多态部分 向上转型 向下转型
来源:互联网 发布:2017前景行业知乎 编辑:程序博客网 时间:2024/06/06 03:31
(多态)转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象。
什么叫父类引用指向子类对象,且听我慢慢道来.从2个名词开始说起:向上转型(upcasting) 、向下转型(downcasting).
举个例子:有2个类,Father是父类,Son类继承自Father。
Father f1 = new Son(); // 这就叫 upcasting (向上转型)// 现在f1引用指向一个Son对象Son s1 = (Son)f1; // 这就叫 downcasting (向下转型)// 现在f1还是指向Son对象
第2个例子:
Father f2 = new Father();Son s2 = (Son)f2; // 出错,子类引用不能指向父类对象
你或许会问,第1个例子中:Son s1 = (Son)f1;问什么 是正确的呢。
很简单因为f1指向一个子类对象,Father f1 = new Son(); 子类s1引用当然可以指向子类对象了。
而f2 被传给了一个Father对象,Father f2 = new Father();子类s1引用不能指向父类对象。
实例
- 向上转型:子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口
- 向上转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新有的方法都会遗失掉,在编译时,系统会提供找不到方法的错误
向下转型:父类引用的对象转换为子类类型称为向下转型。
父类
package testP.test;class Person { public void eat(){ System.out.println("Person eatting..."); } public void sleep() { System.out.println("Person sleep..."); }}
向上转型
package testP.test;public class son extends Person { public void eat() { System.out.println("son eatting..."); } public void fly() { System.out.println("son fly..."); } public static void main(String[] args) { Person person = new son(); person.eat(); // 调用的是son里面的eat方法,son重写了Person父类的方法 person.sleep(); //调用的是父类person的方法 person.fly(); //报错了,丢失了son类的fly方法 }}
向下转型
在向下转型过程中,分为两种情况:
情况一:如果父类引用的对象如果引用的是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。
情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误
- 安全不报错
package testP.test;public class son extends Person { public void eat() { System.out.println("son eatting..."); } public void fly() { System.out.println("son fly..."); } public static void main(String[] args) { Person person = new son(); // 向上转型 son s = (son)person; //向下转型,编译和运行皆不会出错 s.fly(); s.eat(); s.sleep(); }}
- 编译器报错
package testP.test;public class son extends Person { public void eat() { System.out.println("son eatting..."); } public void fly() { System.out.println("son fly..."); } public static void main(String[] args) { Person upPerson = new Person(); son so = (son)upPerson; // 向下转型 编译器报错了 so.fly(); }}
阅读全文
0 0
- Java 多态部分 向上转型 向下转型
- Java 多态部分 向上转型 向下转型
- java多态向上、向下转型问题
- java多态中的向上转型和向下转型
- java多态使用、向上转型、向下转型
- Java向上转型和向下转型(多态核心)
- java多态向上转型和向下转型
- java的多态(向上转型、向下转型)
- 多态实现(向上转型、向下转型)--java
- java 多态中的向上转型和向下转型
- 【Java】向上转型 向下转型
- Java 向上转型,向下转型
- java 向上转型向下转型
- 多态中的向上转型,向下转型
- 向上转型 向下转型
- 向上转型、向下转型
- 向上转型,向下转型
- 向上转型、向下转型
- web学习笔记(一)
- 如何快速获取图片的ROI区域坐标
- NetWorkUtils
- 点击变色
- luoguP1471 方差
- Java 多态部分 向上转型 向下转型
- ImageLoader简单属性
- 集合为空与长度为零区别
- 冒泡排序
- 常用的SQL语句
- SGISTL源码探究-关联式容器:hash_set
- const变量 C++
- 转发,重定向中的路径问题以及两者的区别,用法
- Eclipse关闭XML文件验证的方法