abstract表明一个类是不完整的,只能作为其他类的一个基类。
抽象类与非抽象类的不同之处有:
1.抽象类无法直接用例子说明,且在抽象类中不能使用操作符new。
2.抽象类允许(但不需要)含有抽象成员。
3.抽象类不能被密封(密封类不能被继承)。
当一个非抽象类是从一个抽象类派生而来时,该非抽象类一定包括所有被继承抽象成员的实际执行。这样的执行是通过使抽象成员无效而得到的。
----《C#编程思想》

在类定义前面放置abstract关键字,可以将类声明为抽象类。
EXAMPLE
public abstract class A{...};
使用abstract关键字可以创建必须在派生类中实现的不完整的类和类成员。
抽象类不能实例化。抽象类的用途是提供多个派生类可共享的基类的公共定义。
例如:类库可以定义一个作为其多个函数的参数的抽象类,并要求使用该库通过创建派生类来提供自己的类实现。
抽象类也可以定义抽象方法。将abstract关键字添加到方法的返回类型的前面。
EXAMPLE
public abstract class A
{
public abstract void AA(int num);
}
抽象方法没有实现,所以方法定义后面是分好,而不是方法块。
抽象类的派生类必须实现所有抽象方法。当抽象类从基类继承虚方法时,抽象类可以使用抽象方法重写该虚方法。
EXAMPLE
public class D
{
public virtual void DoWork(int i){}
}
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,则该方法对于从抽象类继承的所有类而言仍然是虚方法。
抽象继承方法的类无法访问该方法的原始实现。在此情况下,抽象类可以强制派生类为虚方法提供新的方法实现。
----《MSDN 抽象类、密封类及类成员》

在C#中使用关键字abstract来定义抽象类和抽象方法。
不能初始化的类被叫做抽象类,他们只提供部分实现,但是另一个类可以继承它并且能创建他们的实例。
抽象类能够被用于类、方法、属性、索引器和事件,使用abstract在一个类声明中表示该类倾向于要作为其它类的基类成员被标识为abstract,或被包含进一个抽象类,必须被其

派生类实现。
EXAMPLE
public abstract class A
{
    public abstract void FunctionA();
    public void FunctionB()
    {
        Console.WriteLine("FunctionB");
    }
}
public class B : A
{
    public override void FunctionA()
    {
        Console.WriteLine("override FunctionA");
    }   
}
public class C
{
    static void Main(string[] args)
    {
        B b1 = new B();
        b1.FunctionA();
        b1.FunctionB();
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}
一个抽象类可以包含抽象方法和非抽象方法,当一个类继承于抽象类,那么这个派生类必须实现基类中所有的抽象方法。
但是通过声明派生类也为抽象类,可以避免所有或特定的虚拟方法的实现。这就是抽象类的部分实现。
EXAMPLE
public abstract class A
{
    public abstract void FunctionA();
    public abstract void FunctionB();
}
public abstract class B : A
{
    public override void FunctionA()
    {
        Console.WriteLine("FunctionA");
    }
}
public class C : B
{
    public override void FunctionB()
    {
        Console.WriteLine("FunctionB");
    }
}
public class D
{
    static void Main(string[] args)
    {
        C c1 = new C();
        c1.FunctionA();
        c1.FunctionB();
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}
C#中,一个抽象类可以继承非抽象类。并且,继承了基类的方法,添加新的抽象和非抽象方法是可行的。
EXAMPLE
public class A
{
    public void FunctionA()
    {
        Console.WriteLine("FunctionA");
    }
}
public abstract class B : A
{
    public abstract void FunctionB();
}
public class C : B
{
    public override void FunctionB()
    {
        Console.WriteLine("FunctionB");
    }
}
public class D
{
    static void Main(string[] args)
    {
        C c1 = new C();
        c1.FunctionA();
        c1.FunctionB();
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}
一个抽象类也能从一个接口来实现,这种情况,必须为所有的方法提供方法体,这些方法是来自接口。
EXAMPLE
public interface I1
{
    void FunctionA();
}
public abstract class A : I1
{
    public void FunctionA()
    {
        Console.WriteLine("FunctionA");
    }
}
public class B : A
{
    public void FunctionB()
    {
        Console.WriteLine("FunctionB");
    }
}
public class C : B
{
    static void Main(string[] args)
    {
        B b1 = new B();
        b1.FunctionA();
        b1.FunctionB();
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }
}
不能把关键字abstract和sealed一起使用,因为一个密封类不能够被抽象。
对于抽象类:
一个抽象类必须为所有的接口成员提供实现。
一个用于实现接口的抽象类可能把接口方法安排到抽象方法上。
EXAMPLE
interface I
{
void FunctionA();
}
abstract class : I
{
public abstract void FunctionA();
}

转载于:https://www.cnblogs.com/lynnjeans/archive/2011/10/19/2217434.html

[转]abstract 抽象类的概念和使用相关推荐

  1. abstract 的基本概念和用法

    abstract 的基本概念和用法 abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就 ...

  2. 继承extends ,this super final 关键字,abstract抽象类,override方法重写

    继承extends 私有成员不能被继承  总结:子类方法中,使用变量的原则是:就近原则 1 package review06; 2 /* 3 私有成员不能被继承 4 子类和父类有同名的成员变量:在子类 ...

  3. JAVA入门级教学之(abstract抽象类)

    目录 JAVA入门级教学之(abstract抽象类) 1.如何定义抽象类? 2.抽象类无法被实例化 3.虽然抽象类没有办法实例化,但是抽象类也有构造方法,该构造方法是给子类创建对象用的 4.抽象类中可 ...

  4. 小白Java学习之路(abstract抽象类,final,接口,equals)

    常见面试题 final修饰静态常量进过方法 final 修饰的基本数据类型变量是无法进行修改的 final 修饰的引用类型的变量 只保证地址不变 对象中的内容可以发生改变 public class T ...

  5. abstract(抽象类)与interface(接口)的区别

    文章目录 前言 一.abstract(抽象类) 1.用abstract关键字修饰方法 1.用abstract关键字修饰类 二.interface(接口) 总结 前言 abstract(抽象类)与int ...

  6. Java关键字之abstract(抽象类的概念和使用)

    1.概述 (1)只给出方法定义而不具体实现的方法被称为抽象方法,抽象方法是没有方法体的,在代码的表达上就是没有"{}".使用 abstract 修饰符来表示抽象方法和抽象类. (2 ...

  7. Java抽象类的概念和使用

    在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你可以只给出方 ...

  8. c# abstract抽象类与继承类子类的构造函数_base

    http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...

  9. 1-10 Java 继承、protected和abstract抽象类

    文章目录 1.继承 1)概念 2)代码例子 2.重写 1) 业务背景 2)代码实现 3)代码说明 3.抽象类,抽象方法 1)业务场景 2)abstract,抽象的 4.protected 修饰符 1. ...

  10. 44从零开始学Java之详解容易让初学者懵圈的abstract抽象类、抽象方法

    作者:孙玉昌,昵称[一一哥],另外[壹壹哥]也是我哦 千锋教育高级教研员.CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 前言 经过前面几篇文章的讲解,我们现在已经对面向对象有了基本的认知, ...

最新文章

  1. 841. Keys and Rooms 钥匙和房间
  2. querySelector() 选择器语法
  3. ROM.RAM,FLASH,PROM,EPROM,EEPROM的区别
  4. 数字化转型的本质:“研产供销服”各环节的敏捷化
  5. visio技巧(曲线、连接点、自制模具)
  6. JavaEE ActionForm的高级应用
  7. 智慧监狱(所)设计方案
  8. Bugku Misc (1—28)
  9. OBD系统系族分类规则
  10. “WORD上次启动失败,以安全模式启动”的解决方法
  11. 洛谷刷题笔记 地球人口承载力估计
  12. modelsim-SE仿真error问题
  13. 用C语言实现简单的神经元
  14. lotus - 深入理解时空证明的 golang 实现部分(PoSt)
  15. echarts雷达图文字不显示_ECharts雷达图指示器名称的设置
  16. 自己实现call|bind|apply三兄dei
  17. 励志名言---002
  18. kalibr编译 error: ‘Eigen::MatrixBase<Derived>::~Matrix
  19. 51nod题解 1005 大数加法
  20. C#,茅塞顿开的精致好码,通用型科学计算器的源代码

热门文章

  1. 【算法笔记】求长度为n的序列的全排列包含的总逆序对数目(树状数组求解)
  2. Somer’s D(Somers’ Delta)-顺序变量相关性分析方法
  3. Python Poetry管理包安装速度慢的解决办法
  4. 织梦错误mynews.lib.php on line 40,织梦错误Fatal error: Using $this when not in object context...
  5. 训练模型以识别文本中的情绪 3 NLP 零到英雄 Training a model to recognize sentiment in text
  6. 算法:回溯十四 Restore IP Addresses数字字符串还原为IP地址(2种解法)
  7. java事物 tran_Java基础——事务
  8. rtx2060什么水平_《赛博朋克2077》持续火热 什么样的笔记本才能畅玩这款游戏
  9. R-squared与Adjust R-squared
  10. 支持向量机(Support Vector Machine SVM)