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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kimi 中级黑马   /  2013-6-6 17:59  /  2042 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法的重载是不是多态的一种表现?

6 个回复

倒序浏览
多态必须具备三大特征:子类继承父类,子类覆盖父类,父类指向子类。
重载因为针对的是方法,违反了面向对象的概念。
而面向对象的三大特性之一是多态,所以重载不是面向对象,而是面向方法,故不是多态。

我对面向对象了解也不够

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报 0 1
自己写的代码,自己看 有注释
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             Chinese c1 = new Chinese();
  6.             c1.SayHello();

  7.             Person p1 = c1; //p1是Person类型的变量,先去看Person中的方法,发现是virtual
  8.             //所以去看p1指向的对象的实际类型Chinese有没有覆盖SayHello,如果有则调用实际类型的方法
  9.             p1.SayHello();
  10.             ////////////////////////////           
  11.             Console.WriteLine(p1.ToString());

  12.             //obj指向的是Chinese类对象,调用用ToString()的时候发现object的ToString是virtual方法
  13.             //所以看Chinese有没有override ToString方法,如果有则调用Chinese的ToString()
  14.             //如果Chinese没有override ToString()方法 则看Chinese的父类有没有override ToString()方法
  15.             object obj = p1;
  16.             obj.ToString();


  17.             Console.ReadKey();
  18.         }
  19.     }
  20.     //
  21.     class Person
  22.     {
  23.         public virtual void SayHello()
  24.         {
  25.             Console.WriteLine("person");
  26.         }
  27.         //重写父类Object的 ToString()方法
  28.         public override string ToString()
  29.         {
  30.             return "我是一个人";
  31.         }

  32.     }
  33.     //
  34.     class Chinese:Person
  35.     {
  36.         public override void SayHello()
  37.         {
  38.             Console.WriteLine("Chinese");
  39.         }
  40.     }
  41.     //
  42.     //
  43.     class BJ : Chinese
  44.     {
  45.         public override void SayHello()
  46.         {
  47.             Console.WriteLine("我是北京人");
  48.         }
  49.     }
复制代码

评分

参与人数 1技术分 +1 收起 理由
杞文明 + 1

查看全部评分

回复 使用道具 举报
无__畏 发表于 2013-6-6 18:17
多态必须具备三大特征:子类继承父类,子类覆盖父类,父类指向子类。
重载因为针对的是方法,违反了面向对 ...

童鞋的回答貌似不太正确。
  1. 重载因为针对的是方法,违反了面向对象的概念。
复制代码
这句话是不是不太正确啊?
我的理解是方法的重载是面向对象,它是多态的一种表现。
重载也是一种多态,不过是一种特殊的多态,是编译时决定的静态多态。
回复 使用道具 举报
本帖最后由 无__畏 于 2013-6-7 00:38 编辑
李奔 发表于 2013-6-7 00:01
童鞋的回答貌似不太正确。这句话是不是不太正确啊?
我的理解是方法的重载是面向对象,它是多态的一种表 ...
谁(对象)去做了什么事情(方法)...
这个可以留给黑马的老师:lol

回复 使用道具 举报
多态可以简单的概述为“一个接口。多种方法”。方法的重载,应该也算是多态应该也算是多态的一种表现吧
回复 使用道具 举报
实现多态一般有4种方式:1.方法重载是多态的一种形式   2.使用虚方法实现多态 3.使用抽象类实现多态  4.使用接口实现多态
如果还有什么问题,我们可以具体交流一下!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马