博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java面向对象之多态
阅读量:6435 次
发布时间:2019-06-23

本文共 2038 字,大约阅读时间需要 6 分钟。

面向对象的多态:
(1)方法的重载与覆写
(2)对象的多态性(可以应用于接口中)
对象的多态性
1、向上转型:子类对象→父类对象   ,程序会自动完成,格式是:父类   父类对象 = 子类实例;
2、向下转型:父类对象→子类对象,使用强制手段,必须明确指出要转型的子类类型,格式:子类  子类对象 =(子类) 父类实例
向上转型程序1
package com.java.extend;class A1 {	public void fun1() {		System.out.println("A1___fun1()");	}	public void fun2() {		this.fun1();	}}class B1 extends A1 {	public void fun1() { // 覆写父类方法		System.out.println("B1___fun1()");	}	public void fun3() {		System.out.println("B1___fun3()");	}}public class PloyDemo1 {	public static void main(String[] args) {		// TODO Auto-generated method stub		B1 b = new B1(); // 实例化子类对象		A1 a = b; // 向上转型关系		/*		 * 通过子类进行父类对象实例化操作的,则如果调用的方法fun1()被子类B1覆写过,则肯定调用被覆写的过的方法		 * 因为操作的是父类对象,所以是无法找到子类中定义的新方法fun3()		 */		a.fun1(); // 子类被覆写过		a.fun2();		// a.fun3();//子类的新方法,找不到的	}}
向下转型程序2
package com.java.extend;class A111 {	public void fun1() {		System.out.println("A1___fun1()");	}	public void fun2() {		this.fun1();	}}class B111 extends A111 {	public void fun1() { // 覆写父类方法		System.out.println("B1___fun1()");	}	public void fun3() {		System.out.println("B1___fun3()");	}}
public class PloyDemo3 {	public static void main(String[] args) {		// TODO Auto-generated method stub		A111 aa = new A111();// 实例化父类对象		B111 b111 = (B111) aa;// 向下转型		b111.fun1();		b111.fun2();		b111.fun3();	}}
以上程序会出现异常: 
Exception in thread "main" java.lang.ClassCastException:com.java.extend.A111 cannot be cast to com.java.extend.B111 at com.java.extend.PloyDemo3.main(PloyDemo3.java:28)出现异常,在对象转换时发生,
如果两个没有关系的类之间发生转换关系,肯定会发生该异常,类比Demo2,若想要产生向下转型,则必须先产生一个向上转型的关系“
A11 aa = new B11();”,表示建立关系
 
package com.java.extend;class A11 {	public void fun1() {		System.out.println("A1___fun1()");	}	public void fun2() {		this.fun1();	}}class B11 extends A11 {	public void fun1() { // 覆写父类方法		System.out.println("B1___fun1()");	}	public void fun3() {		System.out.println("B1___fun3()");	}}public class PloyDemo2 {	public static void main(String[] args) {		// TODO Auto-generated method stub		A11 aa = new B11();// 向上转型		B11 b11 = (B11) aa;// 向下转型		b11.fun1();		b11.fun2();		b11.fun3();	}}

转载地址:http://drhga.baihongyu.com/

你可能感兴趣的文章
win32窗口机制之CreateWindow
查看>>
C/C++ 一段代码区分数组指针|指针数组|函数指针|函数指针数组
查看>>
awakeFromNib小总结
查看>>
java知识大全积累篇
查看>>
图像特效——摩尔纹 moir
查看>>
Android OpenGL ES(十)绘制三角形Triangle .
查看>>
EAGAIN、EWOULDBLOCK、EINTR与非阻塞 长连接
查看>>
善于总结所做所学的内容
查看>>
Lua-简洁、轻量、可扩展的脚本语言
查看>>
org.hibernate.MappingException: entity class not found hbm可以解析,但是实体类不能解析...
查看>>
Android -- Drag&&Drop
查看>>
Extjs4:改变Grid单元格背景色(转载)
查看>>
中医无绝症[转载]
查看>>
ZendStudio10.6.1如何安装最新的集成svn小工具?
查看>>
PHP中$_SERVER的详细参数与说明
查看>>
jquery easyui datagrid mvc server端分页排序筛选的实现
查看>>
去了大公司就一定能学到很牛的技术么?
查看>>
methanol 模块化的可定制的网页爬虫软件,主要的优点是速度快。
查看>>
IOS开发之表视图(UITableView)
查看>>
Notepad++去除代码行号的几种方法
查看>>