码迷,mamicode.com
首页 > 其他好文 > 详细

对象多态性分析

时间:2015-03-14 16:57:54      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:对象   多态   转型   

所谓对象多态性即是指子类与父类之间的相互转换关系。

向上转型:父类  父类对象 = 子类实例

向下转型:子类  子类对象 = (子类) 父类实例

只有先进行向上转型才能向下转型

<pre name="code" class="java">class A{
	public void fun1(){
		System.out.println("1、A类 --> public void fun1(){}") ;
	}
	public void fun2(){
		this.fun1() ;
	}
};
class B extends A{
	public void fun1(){	// 将方法覆写了
		System.out.println("2、B类 --> public void fun1(){}") ;
	}
	public void fun3(){	// 此操作为子类自己定义的,父类中不存在
		System.out.println("3、B类 --> public void fun3(){}") ;
	}
};
public class PolDemo02{
	public static void main(String args[]){
		A a = new B() ;	// 发生向上转型关系,子类实例 --> 父类实例
		B b = (B)a ;	// 发生向下转型关系,强制
		b.fun3() ;
		b.fun2() ;
	}
};

让我们来看一个例子,通过实例来体现对象多态性在程序设计中的所用。

现在要求设计一个方法,该方法可以接收某个类所有子类的实例

首先给出三个类A、B、C

class A{
	public void fun1(){
		System.out.println("1、A类 --> public void fun1(){}") ;
	}
	public void fun2(){
		this.fun1() ;
	}
};
class B extends A{
	public void fun1(){	// 将方法覆写了
		System.out.println("2、B类 --> public void fun1(){}") ;
	}
	public void fun3(){	// 此操作为子类自己定义的,父类中不存在
		System.out.println("3、B类 --> public void fun3(){}") ;
	}
};
class C extends A{
	public void fun1(){	// 将方法覆写了
		System.out.println("4、C类 --> public void fun1(){}") ;
	}
	public void fun4(){	// 此操作为子类自己定义的,父类中不存在
		System.out.println("5、C类 --> public void fun4(){}") ;
	}
};

我们直接定义的接受子类实例的方法

public class PolDemo04{
	public static void main(String args[]){
		fun(new B()) ;
		fun(new C()) ;
	}
	public static void fun(B b){
		b.fun2() ;
		b.fun3() ;
	}
	public static void fun(C c){
		c.fun2() ;
		c.fun4() ;
	}
};

如上,通过重载fun()方法接收了A类所有子类的实例,但如果A类子类比较多,这样写将会需要大量的代码量

考虑到每一个子类都可以自动向上转型,我们可以利用这个特点

public class PolDemo06{
public static void main(String args[]){
fun(new B()) ;
fun(new C()) ;
}
public static void fun(A a){
a.fun2() ;
B b = (B)a ;
b.fun3() ;
}
};
这样,就实现了我们目的,但考虑到传入fun函数的实例不确定是哪一个子类的对象,java设计者设计了一个instance()方法来辨别。

public class PolDemo08{
	public static void main(String args[]){
		fun(new B()) ;
		fun(new C()) ;
	}
	public static void fun(A a){
		a.fun2() ;
		if(a instanceof B){
			B b = (B)a ;
			b.fun3() ;
		}
		if(a instanceof C){
			C c = (C)a ;
			c.fun4() ;
		}
	}
};

对象多态性分析

标签:对象   多态   转型   

原文地址:http://blog.csdn.net/u014492609/article/details/44205609

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!