A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭凯 中级黑马   /  2012-11-28 10:09  /  1192 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

什么是类的多态,体现在哪些方面,以及如何实现的?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
理解C#多态性之前首先理解一下什么叫多态。同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。C#多态性通过派生类覆写基类中的虚函数型方法来实现。

C#多态性分为两种,一种是编译时的多态性,一种是运行时的多态性。

◆编译时的多态性:编译时的多态性是通过重载来实现的。对于非虚的成员来说,系统在编译时,根据传递的参数、返回的类型等信息决定实现何种操作。

◆运行时的多态性:运行时的多态性就是指直到系统运行时,才根据实际情况决定实现何种操作。C#中运行时的多态性是通过覆写虚成员实现。


C#代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
     public class Vehicle
     {
         public virtual string Run()
         {
             return "aaa";
         }
     }
     public class Car : Vehicle
    {
         public override string Run()
         {
             return "running a car!";
         }
     
    }
     public class Airplane : Vehicle
     {
         public override string Run()
         {
             return "fly a Airplance!";
         }

    }
     
    public partial class Form1 : Form
     {
         
        public Form1()
         {
             InitializeComponent();
         }
   
        private void Form1_Load(object sender, EventArgs e)
         {
             Vehicle v = new Vehicle();
             Car c = new Car();
             Airplane a = new Airplane();
             Console.WriteLine(v.Run());
             Console.WriteLine(c.Run());
             Console.WriteLine(a.Run());
         }
        
    }
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
java中的多态,可以总结它为:

    一、使用父类类型的引用指向子类的对象;

    二、该引用只能调用父类中定义的方法和变量;

    三、如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法;(动态连接、动态调用)

    四、变量不能被重写(覆盖),”重写“的概念只针对方法。

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马