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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© V_John 中级黑马   /  2013-10-31 19:51  /  1536 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 V_John 于 2013-11-1 21:53 编辑

虽然有时候能搞懂这些东西,但是一不留神,就又忘了,大牛们再给个加深印象的解说吧!感激不禁。
不要代码哦,通俗易懂点。谢谢咯!

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

6 个回复

倒序浏览
抽象方法
父类的方法为抽象方法时,父类必须为抽象类。抽象方法没有方法体。
如果含有抽象方法,父类也必须为抽象类。
子类必须是重写override 父类抽象方法。
不能实例化抽象方法。

虚方法
如果对于子类,有些子类需要实现,有些不需要实现,那么可以用虚方法。
如果不想让类成为抽象方法,那么可以把方法声明为虚函数virtual(父类)。来实现方法重写(子类),直接实现
虚方法需要方法体。

接口和类有什么异同
不同:
不能直接实例化接口
接口不包含方法的实现。
接口可以多继承,类只能单继承。
类定义可在不同的源文件中进行拆分。
相同
接口、类、结构都可以从多个接口继承。
接口类似于抽象类:集成接口的任何飞抽象类型都必须实现接口的所有成员。
接口和类都可以包含事件、索引器、方法和属性。

继承
子类拥有父类的属性,方法等等。
一旦程序员的保证不靠谱,照样报错。
Object类是所有类的基类。

以上表现说明它具有多态形式。

评分

参与人数 1技术分 +2 收起 理由
追溯客 + 2

查看全部评分

回复 使用道具 举报 1 0
       我来个抽象方法吧。比如手你得到一本葵花宝典(父类)。欲练此功必先自宫这个是必须的。但是这个方法却没说你该如何去做这个拯救世界的事情,你可以用小刀,大刀菜刀,斧子,锤子砸都随你,所以你继承了葵花宝典的精髓,但是不限制你怎么做,这就是抽象方法。
   如果说这本书定死了让你用锤子砸,而且告诉了你具体方法。 你自己嫌不爽快非要用斧子砍,都能达到一样的目的,这就是虚方法。
     接口吧。。。额。。。 比如你切的时候有点不爽,为啥不爽呢,毕竟就一次,十八般武器都需要来试一遍,所以你就需要额外的去找个路子把各种武器弄过来,而且还和葵花宝典介绍的不冲突哟!让你各种爽哦。
      
   

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
LS回答要逆天{:soso_e127:}
回复 使用道具 举报
抽象方法就是   [访问修饰符] abstract 返回类型 方法名();
抽象成员(只能是公共的,方法,索引,属性等等)只能定义在接口或者抽象类中。抽象方法没有方法体的实现,主要是为了继承重写。

虚方法就是   [访问修饰符] virtual 返回类型 方法名() {//方法的实现代码}
虚方法跟正常方法一样,只不过允许派生类重写,重写后派生类对象(不管是否是父类型)一般访问不到虚方法了,需要特殊方法访问。
如果没重写子类对父类的成员还可以隐藏(就是签名一摸一样),还可以构成重写(就是方法名一样,签名不同)。

接口跟抽象类有点类似,都为了实现多态,接口注重对功能(即方法,时间,索引,属性等的抽象),抽象类对整个对象的抽象,另接口支持多继承。
[访问修饰符] interface 接口名

上例子
  1. class A
  2.     {
  3.         public string str = "A";
  4.         public void Show()
  5.         { Console.WriteLine("Show A"); }
  6.     }
  7.     class B:A
  8.     {
  9.         public string str = "B";
  10.         public virtual void Show()
  11.         { Console.WriteLine("Show B"); }
  12.     }
  13.     abstract class C:B
  14.     {
  15.         public abstract void Show();//这叫隐藏
  16.         //public override void Show()//这叫重写
  17.         //{ Console.WriteLine("Show C"); }//抽象类可以继承类或接口,可以重写虚方法也可以不重写,但是抽象成员如果继承了则必须被重写
  18.     }
  19.     class D:C
  20.     {
  21.         public string str = "D";
  22.         public override void Show()//必须重写抽象成员,虚方法就可以不重写
  23.         { Console.WriteLine("Show D"); }
  24.     }
  25.     class MyClass
  26.     {
  27.         static void Main(string[] args)
  28.         {
  29.             D d = new D();
  30.             C c = d;
  31.             B b = d;
  32.             A a = d;
  33.             Console.WriteLine(d.str);//D
  34.             Console.WriteLine(c.str);//B
  35.             Console.WriteLine(b.str);//B
  36.             Console.WriteLine(a.str);//A

  37.             Console.WriteLine();
  38.             
  39.             d.Show();//D
  40.             c.Show();//C
  41.             b.Show();//C
  42.             a.Show();//A
  43.             Console.ReadKey();
  44.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
实现多态的三种方法:虚方法、抽象类、多态
如果父类中的方法有默认的实现,并且父类需要被实例化,这时可以考虑将父类定义成一个普通类,
虚方法来实现多态。
如果父类中的方法没有默认实现,父类也不需要被实例化,则可以将该类定义为抽象类。
接口为了实现子类的某一种功能

评分

参与人数 1技术分 +1 收起 理由
追溯客 + 1

查看全部评分

回复 使用道具 举报
V_John 中级黑马 2013-10-31 22:25:33
7#
有你珍贵 发表于 2013-10-31 20:12
我来个抽象方法吧。比如手你得到一本葵花宝典(父类)。欲练此功必先自宫这个是必须的。但是这个方 ...

额。。。形象,生动,拟人。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马