黑马程序员技术交流社区
标题: c# [打印本页]
作者: 568839480 时间: 2013-12-31 10:58
标题: c#
本帖最后由 568839480 于 2014-1-3 12:49 编辑
抽象类的意义
作者: 一席倾城 时间: 2013-12-31 11:45
抽象类可以理解为人类对未知事物,也就是一个未知工程的原始框架,根据他来派生出活生生的具体的类.有这些具体的类在派生出新的类来适应新的要求.
作者: 如远行客 时间: 2014-1-1 09:36
抽象类相当于一个规范,它规定了某些类型所具有的特性,它可以说是类的抽象,继承自抽象类的子类说明其具有这些性质,那么,这个子类就必须实现抽象类中的所有抽象成员。就像我们生活中的那些标准,使用产品的人不会去关注相关的标准,但是生产商品的企业在生产时必须要执行相关的标准,这些标准规定了产品的各种指标,只有执行了标准这个产品才是达标的,才能进入市场。抽象类就相当于这种标准。
作者: qly2046 时间: 2014-1-1 10:29
它是一个未实现定义的接口,你可以根据自己的需要对抽象类进行定义.抽象类只能作为其它类的基类.
作者: 卖火柴 时间: 2014-1-1 11:18
抽象类是特殊的类,只是不能被实例化;除此以外,具有类的其他特性;重要的是抽象类可以包括抽象方法,这是普通类所不能的。抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们。另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们。
作者: liulinaxue 时间: 2014-1-1 21:34
根据里氏代换原则,子类可以替代父类。使用抽象类
作者: liulinaxue 时间: 2014-1-1 21:37
使用抽象类/接口更具有稳定性,可以通过拓展子类,保证“开放-封闭原则”(对拓展开放,对修改封闭)
----------现学现卖了
作者: lei130102 时间: 2014-1-2 11:40
1.--抽象类不能实例化
--抽象类可以包含抽象方法和抽象访问器(如抽象属性)。
--抽象类可以有构造函数(没有抽象构造函数,抽象静态方法)
--抽象类可以有字段
抽象类的用途是提供多个派生类可共享的基类的公共定义。例如,类库可以定义一个作为其多个函数的参数的抽象类,并要求程序员使用该库通过创建派生类来提供自己的类实现。
如果希望禁止通过 new 关键字直接进行实例化,可以将类声明为 abstract。如果这样做,则仅当从该类派生新类时才能使用该类。
- abstract class BaseClass // Abstract class
- {
- protected int _x = 100;
- protected int _y = 150;
- public abstract void AbstractMethod(); // Abstract method
- public abstract int X { get; }
- public abstract int Y { get; }
- }
复制代码
2.--抽象方法没有实现(所以方法定义后面是分号,而不是常规的方法块)
--如果某个类包含抽象成员,则该类自身必须声明为抽象类
--在抽象方法声明中使用 static 或 virtual 修饰符是错误的(抽象方法是隐式的虚方法, 在静态属性上使用 abstract 修饰符是错误的)
--不要在抽象类型中定义公共的(public)或受保护的内部(protected internal)构造函数。应在抽象类中定义一个受保护构造函数(protected)或内部构造函数(internal)。(具有 public 或 protected internal 可见性的构造函数用于能进行实例化的类型。任何情况下抽象类型都不能实例化)
- public abstract class A
- {
- public abstract void DoWork(int i);
- }
复制代码
3.--抽象类的派生类必须实现所有抽象方法。
--实现由一个重写方法override提供,此重写方法是非抽象类的一个成员。
- abstract class WashingMachine
- {
- protected WashingMachine()//构造函数
- {
- // Code to initialize the class goes here.
- }
-
- abstract public void Wash();
- abstract public void Rinse(int loadSize);
- abstract public long Spin(int speed);
- }
复制代码
在上面的示例中,用一个已实现的方法和三个未实现的方法声明抽象类。从该类继承的类必须实现 Wash、Rinse 和 Spin 方法。下例显示了该类实现的可能形式:
- class MyWashingMachine : WashingMachine
- {
- public MyWashingMachine()
- {
- // Initialization code goes here.
- }
- override public void Wash()
- {
- // Wash code goes here.
- }
- override public void Rinse(int loadSize)
- {
- // Rinse code goes here.
- }
- override public long Spin(int speed)
- {
- // Spin code goes here.
- }
- }
复制代码
4.当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。
- // compile with: /target:library
- public class D
- {
- public virtual void DoWork(int i)
- {
- // Original implementation.
- }
- }
-
- public abstract class E : D
- {
- public abstract override void DoWork(int i);
- }
-
- public class F : E
- {
- public override void DoWork(int i)
- {
- // New implementation.
- }
- }
复制代码
如果将virtual方法声明为abstract,则该方法对于从抽象类继承的所有类而言仍然是虚方法。继承抽象方法的类无法访问该方法的原始实现。在前面的示例中,类 F 上的 DoWork 无法调用类 D 上的 DoWork。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。
5.抽象类必须为所有接口成员提供实现。实现接口的抽象类可以将接口方法映射到抽象方法上。
- interface I
- {
- void M();
- }
- abstract class C : I
- {
- public abstract void M();
- }
复制代码
作者: 师弟 时间: 2014-1-3 02:14
从面向对象的角度:现实世界中有抽象事物,所以面向对象语言中也存在抽象,如(人,动物),只有抽象的意思,没有确定到那个实物,它只是其他类一般的模型。从程序设计角度:有利于更好的设计代码,使程序更加合理,更具逻辑性,利于开发。纯属个人对面向对象的理解……
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |