概念不清,知道的进来

zhangwenqian 2010-03-16 04:47:40
抽象类的抽象方法 必须在子类里面实现吗? 
...全文
106 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
a213326364 2010-03-16
  • 打赏
  • 举报
回复
没分了,占个位置
calltaotao 2010-03-16
  • 打赏
  • 举报
回复
抽象方法仅存在于抽象类中,而抽象类与接口有许多相似之处,但类与接口有本质的区别.
如果你刚刚接触oop的话,可以简单地将类理解为"是什么",而将接口理解为"能做什么".
google "抽象类 接口"你会了解到更多...
我对抽象类的理解是将它作为基类来使用.
[Code=C#]
/// <summary>
/// 四驱车
/// </summary>
public abstract class ForewheelDrive
{
public abstract void SpeedUp();
public abstract void Break();
}

/// <summary>
/// 跑车
/// </summary>
public abstract class Roadster:ForewheelDrive
{
public abstract void IntelligenceShift();
}

/// <summary>
/// 兰博基尼
/// </summary>
public class Lamborghini:Roadster
{
public override void SpeedUp()
{
// 实现加速
}

public override void Break()
{
// 实现减速
}

public override void IntelligenceShift()
{
// 实现只能变速
}
}
[/Code]

烈火蜓蜻 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 zhangwenqian 的回复:]
抽象类的抽象方法 必须在子类里面实现吗? 
[/Quote]

不是必须的,

如果你的子类没有实现,那么你的子类也是抽象的
wangxianshou 2010-03-16
  • 打赏
  • 举报
回复
我是来学习的,谢谢
calltaotao 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhangwenqian 的回复:]

抽象类的抽象方法可以无限传递下去吗?假设这个抽象类的子孙都是抽象类?
[/Quote]

抽象是不能实例化的.所有子孙都是抽象类,那就等于永远不实现...这样有意义吗?
yzxdc 2010-03-16
  • 打赏
  • 举报
回复
所谓抽象方法就是只有定义没有实现的方法,而对于子类来说,它继承了所有祖先类的所有public和protected方法,由于所有想要实例化的类来说,不允许只有定义没有实现的方法存在,所以包含有未实现方法的类只能是抽象类,换而言之非抽象类必须实现所有祖先的抽象方法
zhangwenqian 2010-03-16
  • 打赏
  • 举报
回复
抽象类的抽象方法可以无限传递下去吗?假设这个抽象类的子孙都是抽象类?
calltaotao 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhangwenqian 的回复:]

一个类定义为抽象类,那么这个类中必须包含抽象方法吗?
楼下继续...
[/Quote]

可以包含也可以不包含,但子类如果不是抽象类,就必须实现先祖类的抽象方法
xupeihuagudulei 2010-03-16
  • 打赏
  • 举报
回复
路过帮顶
缭绕飘渺 2010-03-16
  • 打赏
  • 举报
回复
C#的抽象类和抽象方法

//抽象方法:只包含方法定义,但没有具体实现的方法,需要其子类或者子类的子类来具体实现。
//静态方法不能标记为 override、virtual 或 abstract,即静态方法都必须是具体的
/抽象类:含有一个或多个抽象方法的类称为抽象类,在声明时,类名前须添加"abstract"关键字
//抽象类中可以包含非抽象方法
//抽象类不能够被实例化,这是因为它包含了没有具体实现的方法,即可实例化的类一定不是抽象类,不包含未具体实现的抽象方法。
//子类继承抽象父类后,可以使用override关键字覆盖父类中的抽象方法,并做具体的实现。也可以不实现抽象方法,留给后代实现,这时子类仍旧是一个抽象类,必须声明为abstract
//继承的抽象方法不可以被隐藏
//隐藏:在子类中创建与父类中的方法具有相同签名(相同的方法名,相同的参数列表--参数类型和次序)的方法(可以带有"virtual"或"override"关键字)即可实现,但建议使用"new"关键字,以明确地隐藏。
//只能使用"override"关键字来覆盖(override)父类中标记为"virtual"、"abstract"或"override"的方法,而子类中标记为override的方法,也必须是父类中标记为"virtual"、"abstract"或"override"的方法。
//覆盖(override):必须使用override关键字,可以被覆盖的方法包括标记为abstract,virtual,和override的方法;
//隐藏:使用new关键字,也可不使用关键字,可以被隐藏的方法包括一般方法,和标记为virtual"或"override"的方法;
//重载(overload):不需要任何特殊的关键字
//静态方法可以被隐藏或重载
zhangwenqian 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 leafold 的回复:]
不一定。如果你的子类不是抽象类,就必须实现。
[/Quote]

我一开始也这么想....
 

到底是什么情况?

leafold 2010-03-16
  • 打赏
  • 举报
回复
不一定。如果你的子类不是抽象类,就必须实现。
zhangwenqian 2010-03-16
  • 打赏
  • 举报
回复
一个类定义为抽象类,那么这个类中必须包含抽象方法吗?
楼下继续...
Snowdust 2010-03-16
  • 打赏
  • 举报
回复
Yes
rwdong2199 2010-03-16
  • 打赏
  • 举报
回复
回复内容太短了
calltaotao 2010-03-16
  • 打赏
  • 举报
回复
是的...

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧