黑马程序员技术交流社区

标题: C# 多态中抽象类的问题 [打印本页]

作者: FrancisTan    时间: 2014-7-8 19:41
标题: C# 多态中抽象类的问题
本帖最后由 FrancisTan 于 2014-7-9 08:02 编辑

就要面试了,有点小紧张呵呵,不过每天的学习还得继续。
想问下各位在C#中抽象类中的方法在派生类中都必须实现吗?

作者: 向晓伟    时间: 2014-7-8 19:54
不一定啊。派生类可以是抽象的。
作者: 许庭洲    时间: 2014-7-8 20:25
//如果一个非抽象类从抽象类中派生,则其必须通过重载来实现所有继承而来的抽象成员。
abstract class A
{
       public abstract void F();
}

abstract class B: A
{
      public void G( ){  }
}

class C: B
{
      public override void F( ) {
            //F的具体实现代码
   }
}
//抽象类A 提供了一个抽象方法F。
//类B从抽象类A中继承,并且又提供了一个方法G;
//因为重载了抽象方法F,并且提供了对F的具体实现,则类C允许是非抽象的。

作者: _xixi_    时间: 2014-7-8 21:33
抽象类里面也可以有普通方法的,从抽象类继承,子类必须重写父类的所有抽象方法,非抽象方法不用重写。
作者: czwanglei    时间: 2014-7-8 23:47
当有人给你回复后,请及时把帖子编辑为提问结束,这样版主才给你加分。
作者: 渐渐的起飞    时间: 2014-7-8 23:51
加油,祝你通过
作者: FrancisTan    时间: 2014-7-9 08:02
许庭洲 发表于 2014-7-8 20:25
//如果一个非抽象类从抽象类中派生,则其必须通过重载来实现所有继承而来的抽象成员。
abstract class A
{

谢谢,懂一点点了!
作者: 昕☆Rainbow    时间: 2014-7-9 10:13
许庭洲 发表于 2014-7-8 20:25
//如果一个非抽象类从抽象类中派生,则其必须通过重载来实现所有继承而来的抽象成员。
abstract class A
{

这里的C是抽象类吗?为什么前面不用加abstract?
作者: 致立    时间: 2014-7-10 21:13
对啊,必须实现。。这个事抽象类的一个特点,要不会报错的。
作者: 绿箭    时间: 2014-7-12 20:08
FrancisTan 发表于 2014-7-9 08:02
谢谢,懂一点点了!

朋友,由override定义的是重写吧,不是重载。重载是方法的参数类型或个数不同的调用.
作者: FrancisTan    时间: 2014-7-12 20:12
绿箭 发表于 2014-7-12 20:08
朋友,由override定义的是重写吧,不是重载。重载是方法的参数类型或个数不同的调用. ...

啊这二个还不一样啊,我彻底凌乱了!不过,谢谢提醒~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2