九,多态

1.多态定义

多态是OOP的最后一个特征,方法的重载和覆写都属于多态性的一个体现,真正的多态还有一个对象多态的概念,对象的多态性主要是指,子类和父类对象的相互转换关系.

  • 向上转型: 父类 父类对象 = 子类实例 (自动完成)

  • 向下转型: 子类 子类对象 = (子类)父类对象 (强制完成)

2. 向上转型和向下转型

2.1转型示例

示例1

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;       // 出错,子类引用不能指向父类对象,ClassCastException类转换异常.


2.2 转型异常原因

两个没有关系的类进行相互的对象转换操作.

示例1正确是因为f1指向一个子类对象,Father f1 = new Son(),子类s1引用当然可以指向子类对象了。

示例2f2 被传给了一个Father对象,Father f2 = new Father(),子类s1引用不能指向父类对象.

2.3 转型操作的总结

1. 父类引用指向子类对象,而子类引用不能指向父类对象.

2. 把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转换.

如:Father f1 = new Son().

3. 把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转换.

:向上转型后调用的方法是子类的方法。原因是转型对象实际指向的是子类,故调用时会调用子类本身的方法。但向上转型时对象会遗失除与父类对象共有的其他方法.向下转型前可以通过instanceof来防止出现异常.

3.转型的意义

示例:

代码中A类为父类,B,C为子类,除了父类的fun1,fun2方法,各自分别有自己的fun3fun4方法.

public class UpcastDemo{
	public static void main(String args[]){
		fun(new B()) ;
		fun(new C()) ;
	}
	public static void fun(A a){
		a.fun2() ;
	}
};
因为向上转型的存在我们不需要提前知道具体是那个子类要调用 fun2方法 ,这样便于抽象管理 .不然实际的代码会如下 :
public class NotUpcastDemo{
	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方法 ,不便于维护和管理 .但是如果子类要向下转型并调用自己独有的方法呢 ?则可以如下操作 ,instanceof判断具体的子类 .

用法: 对象 instanceof //返回的是boolean.

public class DowncustDemo{
	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() ;
		}
	}
};
向下转型中 instance判断很重要 ,防止转换异常 .继承关系中 ,父类的设计非常重要 ,设计合理会给代码开发带来很大的简便性 .


20150414


JAVA学习笔记系列

--------------------------------------------

                    联系方式

--------------------------------------------

        Weibo: ARESXIONG

        E-Mail: [email protected]

------------------------------------------------

你可能感兴趣的:(多态,向上转型,向下转型)