多态的概念

简介:

前几天有人问我多态的概念,一时半会也没说清。

这种基本概念有时经常能问倒人,特此在这写一下,表述我对多态的理解。

多态就是明明是一个A物体却表现出B物体的行为。在代码中,多态的实现务必要和继承,重写方法联系起来。

具体的说一个父类,一个子类。声明的时候用父类,赋值的时候用子类。此时运行父类实例的方法的时候,调用的确实子类的方法。画个图配合文字更好理解。

Father f=new Son();//子类的内容赋值给父类。?

如此图,当调用f.A()的时候,实际调用的是子类A的方法。方法A必须是override过的。这种多态的能力在模式设计的时候,比如工厂模式的时候,很有用的。

还有一点,虽然f是Father 型的,但是给他的实例是Son类型,所以f.GetType()得到的是Son类型的。

注意父类的A方法必须是virtual,abstract的或者本身是override的,不然子类无法override的。所以virtual通常和override成对出现,表示此方法可以被override,单独写个virtual也没啥意义。

image

 

关于子类和父类

子类包含的信息大于父类,所以子类可以隐式的转成父类,父类所需要的信息,子类都有,所以父类不担心有什么内容获不到。但是父类转成子类,子类需要的内容,父类不一定会有,因此父类无法转成子类。

 

father f = new father();

son s = (son)f;//这样会报错的。

//对于上面这种方式,如果需要转型赋值的话,可以使用json方式巧妙的转型

string json = JsonHelper.ToJson<father>(f); 
son s = JsonHelper.FromJson<son>(json);

但是如果f赋值的时候赋值的是son,则可以转型。

father f = new son();//子类的内容赋值给父类。 
son s = (son)f;//不会报错

















本文转自cnn23711151CTO博客,原文链接: http://blog.51cto.com/cnn237111/761231,如需转载请自行联系原作者








相关文章
|
4月前
|
Java
Java面向对象编程,解释封装、继承和多态的概念。
Java面向对象编程,解释封装、继承和多态的概念。
39 2
|
8月前
|
存储 编译器 C++
C++ 面向对象三大特性——多态
面向对象三大特性的,封装,继承,多态,今天我们研究研究C++的多态。
|
8月前
|
存储 编译器 C++
【C++】多态及原理
【C++】多态及原理
28 0
|
8月前
|
Java
Java面向对象多态
多态概述 Java 多态是指同一种类型的对象,在不同的情况下有着不同的状态和行为。它是基于继承、重写和向上转型等特性实现的,多态是面向对象编程的三大特征之一,其他两个分别是封装和继承。 Java 多态包括以下三种方式 方法重写(Override) 子类可以对从父类继承的方法进行重写,以便根据子类的需要来覆盖掉父类中的方法实现。这样在调用时,可以根据对象的不同来执行对应的方法。
47 0
|
8月前
|
编译器 C++
【面向对象语言三大特性之 “多态”】(一)
【面向对象语言三大特性之 “多态”】(一)
44 0
|
8月前
|
编译器 Linux C++
【面向对象语言三大特性之 “多态”】(二)
【面向对象语言三大特性之 “多态”】(二)
58 0
|
8月前
多态性概念及案例
多态性概念及案例
41 0
|
9月前
再次理解多态概念
再次理解多态概念
41 0
|
11月前
|
Java
Java面向对象—多态
Java面向对象—多态
60 0
|
Java
Java面向对象三剑客之——多态
今天我们来学习Java多态的知识。在Java中,多态是一种强大的特性,它允许我们在运行时根据不同的对象类型来执行不同的操作,从而使代码更加灵活和可扩展。让我们来探索Java多态的奥秘!
88 0