Java三大特性之多态
2016-05-20 17:21
369 查看
转载请标明出处:/article/8810001.html
本文出自【吴孝城的CSDN博客】
一个行为具有多种表现形式称为多态
如吹奏乐器,吹笛子和吹箫声音是不同的,同样是吹这个动作,作用在不同对象上产生不同的效果,这就是多态。吹这个动作的多态。
Java的引用变量有两个类型,编译时类型和运行时类型。
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的类型决定,如果编辑时类型和运行时类型不一致,就可能出现多态。
多态的体现
方法的重载和重写
对象的多态性
如类A,类B
其中
那么向上转型
可以通过a调用父类方法,如果父类方法被重写,将调用重写后的方法
向下转型要先向上转型,再向下转型
可以通过b调用子类的方法,父类的方法,(因为子类继承父类,享有父类方法)
引用类型转换
1、向上类型转换(隐式/自动类型转换),由小类型转向大类型
2、向下类型转换(强制类型转换),由大类型转向小类型
3、instanceof运算符,用来解决类型转换的安全性问题
例子
当在进行类型转换时,如果类型不匹配时会出现异常,可以用instanceof来用避免类型转换时的安全性问题
本文出自【吴孝城的CSDN博客】
一个行为具有多种表现形式称为多态
如吹奏乐器,吹笛子和吹箫声音是不同的,同样是吹这个动作,作用在不同对象上产生不同的效果,这就是多态。吹这个动作的多态。
Java的引用变量有两个类型,编译时类型和运行时类型。
编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的类型决定,如果编辑时类型和运行时类型不一致,就可能出现多态。
多态的体现
方法的重载和重写
对象的多态性
如类A,类B
其中
B extends A
那么向上转型
A a = new B();
可以通过a调用父类方法,如果父类方法被重写,将调用重写后的方法
向下转型要先向上转型,再向下转型
A a = new B(); B b = (B)a;
可以通过b调用子类的方法,父类的方法,(因为子类继承父类,享有父类方法)
引用类型转换
1、向上类型转换(隐式/自动类型转换),由小类型转向大类型
2、向下类型转换(强制类型转换),由大类型转向小类型
3、instanceof运算符,用来解决类型转换的安全性问题
例子
package cn.wuxiaocheng; class A { public void priA1() { System.out.println("priA1"); } public void priA2() { System.err.println("priA2"); } } class B extends A { // 重写父类的priA1()方法 public void priA1() { System.out.println("重写priA1"); } public void priB() { System.out.println("priB"); } } public class Test { public static void main(String[] args) { // 向上转型 A a = new B(); a.priA1(); a.priA2(); } }
package cn.wuxiaocheng; class A { public void priA1() { System.out.println("priA1"); } public void priA2() { System.err.println("priA2"); } } class B extends A { // 重写父类的priA1()方法 public void priA1() { System.out.println("重写priA1"); } public void priB() { System.out.println("priB"); } } public class Test { public static void main(String[] args) { // 向下转型要先向上转型,再向下转型 A a2 = new B(); B b = (B)a2; b.priA1(); b.priA2(); b.priB(); } }
当在进行类型转换时,如果类型不匹配时会出现异常,可以用instanceof来用避免类型转换时的安全性问题
package cn.wuxiaocheng; class A { public void priA1() { System.out.println("priA1"); } public void priA2() { System.err.println("priA2"); } } class B extends A { // 重写父类的priA1()方法 public void priA1() { System.out.println("重写priA1"); } public void priB() { System.out.println("priB"); } } public class Test { public static void main(String[] args) { A a1 = new A(); System.out.println(a1 instanceof A); System.out.println(a1 instanceof B); A a2 = new B(); System.out.println(a2 instanceof A); System.out.println(a2 instanceof B); } }
相关文章推荐
- 深入Java集合学习系列:ArrayList的实现原理
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- 离散FFT和图像二维FFT变换的java实现
- 深入Java集合学习系列:LinkedHashMap的实现原理
- Java开发使用Excel批量导入数据
- 深入Java集合学习系列:LinkedHashSet的实现原理
- 搭建JavaWeb服务器
- 深入Java集合学习系列:HashSet的实现原理
- java基础知识之二
- JavaWeb防止表单重复提交
- Struts2 过滤器无法正常过滤.action请求
- java基础知识点
- JDK1.8-新特性
- JAVA面向对象高级特性之继承(1)常见问题解答
- 深入Java集合学习系列:HashMap的实现原理
- java并发编程的知识点
- HBase Java API类介绍
- 第12章 Java内存的模型与线程
- Struts2与Spring集成中的自动装配策略
- Java Enum