using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//抽象类(abstract)
//abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用abstract修饰符
//以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
//抽象类的特性
//1、抽象类不能实例化。
//2、抽象类可以包含抽象方法和抽象访问器。
//3、不能用 sealed 修饰符修改抽象类,这意味着抽象类不能被继承。
//4、从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。
//抽象方法
//1、抽象方法是隐式的虚方法。
//2、只允许在抽象类使用抽象方法声明。
//3、因为抽象方法声明不提供实际的实现,所有没有方法体;方法声明只是以一个分号结束,
//并且在签名后没有大括号,实现由一个重写方法提供,此重写方法是非抽象类的成员。
//4、在抽象方法声明中使用static或virtual修饰符是错误的。
//5、除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
//6、在静态属性上使用abstract修饰符是错误的。
//7、在派生类中,通过包括使用override修饰符的属性声明,可以重写抽象的继承属性。
namespace 抽象类
{
//定义一个抽象类
abstract class A
{
protected int _x;
//private abstract void F(); //报错!虚拟成员或抽象成员不能是私有的。
public abstract void F(); //声明一个抽象方法,抽象方法必须定义在抽象类中,并且方法中不能包含主体。
public abstract int X { get; set; } //声明一个抽象属性
}
class B : A
{
public override void F() //继承抽象类,必须重写抽象类中的抽象方法。
{
throw new NotImplementedException();
}
public override int X
{
get
{
return _x;
}
set
{
_x = value;
}
}
}
class Program
{
static void Main(string[] args)
{
//A a = new A(); //报错!1、抽象类不能实例化。
B b = new B(); //可以实例化
b.X = ;
Console.WriteLine(b.X);
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace 抽象类1
{
//员工类
abstract class Employee
{
protected string _name;
protected Employee()
{ }
protected Employee(string name)
{
_name = name;
}
//抽象方法
public abstract void StartWork(); //如果实现共同操作使用虚方法,如果不知道实现操作使用抽象方法。
}
//经理类
class Manager : Employee
{
//构造函数
public Manager(string name)
: base(name) //赋值给基类(Employee)构造函数name
{ }
//重写虚方法
public override void StartWork() //使用虚方法实现面向对象的多态
{
Console.WriteLine(_name + "给员工下达任务");
}
}
//秘书类
class Secretary : Employee
{
public Secretary(string name) : base(name) { }
public override void StartWork()
{
Console.WriteLine(_name + "协助经理");
}
}
//销售类
class Seller : Employee
{
public Seller(string name) : base(name) { }
public override void StartWork()
{
Console.WriteLine(_name + "销售产品");
}
}
//财务类
class Accountant : Employee
{
public Accountant(string name) : base(name) { }
public override void StartWork()
{
Console.WriteLine(_name + "管理公司财政");
}
}
class Program
{
static void Main(string[] args)
{
Employee[] emp = new Employee[];
emp[] = new Manager("张三");
emp[] = new Secretary("李四");
emp[] = new Seller("王五");
emp[] = new Seller("马六");
emp[] = new Accountant("钱七");
Console.WriteLine("早上8点,开始工作");
foreach (Employee e in emp)
{
e.StartWork();
}
Console.ReadKey();
}
}
}

c# 抽象类(abstract)的更多相关文章

  1. php中的抽象类(abstract class)和接口(interface)

    一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...

  2. PHP的接口类(interface)和抽象类(abstract)的区别

    <?php /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么 ...

  3. JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展

    JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来 ...

  4. [PHP] 抽象类abstract的回顾

    1.abstract定义为抽象的类不能被实例化. 2.它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的. 3.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实 ...

  5. C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较

    由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...

  6. 高级类特性----抽象类(abstract class)

    抽象类(abstract class) 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用.类的设计应该保证父类和子类能够共享特征.有时将一个父类设计得非常抽象,以至于它没有具 ...

  7. Java中的抽象类abstract

    abstract定义抽象类 abstract定义抽象方法,只需要声明,不需要实现 包含抽象方法的类是抽象类 抽象类中可以包含抽象方法,也可以包含普通方法 抽象类不能直接创建,可以定义父类引用变量指向子 ...

  8. Day06_30_抽象类(Abstract)

    抽象类 Abstract 什么是抽象类? 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...

  9. c#中抽象类(abstract)和接口(interface)的相同点与区别

    相同点: 1.都可以被继承 2.都不能被实例化 3.都可以包含方法声明 4.派生类必须实现未实现的方法 区别: 1.抽象基类可以定义字段.属性.方法实现.接口只能定义属性.索引器.事件.和方法声明,不 ...

  10. C# 抽象类abstract

    不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例,有未被实现的方法.抽象类不可以new对象. "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被 ...

随机推荐

  1. Boolean 转 string

    boolean b=false; String b= String.valueOf(b);

  2. iOS wkWebView点击链接无反应

    在使用wkWebView的时候发现用webView加载youku.com,里面的视频链接点击是可以跳转的,但是呢,加载v.qq.com的时候发现链接点击又没有效果,折腾了很久最后找到解决方案 实现WK ...

  3. Mac显示和隐藏隐藏文件

    显示:defaults write com.apple.finder AppleShowAllFiles -bool true 隐藏:defaults write com.apple.finder A ...

  4. 华为终端开放实验室Android Beta 4测试能力上线

    ​​​7月26日,Android P Beta 4发布(即Android P DP5),此版本为开发者最后一个预览版本,也预示着Android P正式版即将与大家见面. 为保证开发者在正式版本来临前做 ...

  5. Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights

    第一次提交遇到这样的情况,怎么回事呢,我在github上提交了ssh key 的啊. 排查先看看能不能解析, 1.先 ping https://github.com 把ip添加到 host :    ...

  6. (转载)将一段符合XML格式规范字符串插入已有XML文档当中

    想我们已经存在一个XML文档,结构如下:   < xmlversion="1.0"encoding="utf-8">< employees&g ...

  7. python 设计模式之单例模式

    单例模式就是防止每个请求到来,都需要在内存里创建一个实例,再通过该实例执行指定的方法. 如果并发量大的话,内存里就会存在非常多功能上一模一样的对象.存在这些对象肯定会消耗内存,对于这些功能相同的对象可 ...

  8. 认识oracle的update更新

    这两天给新同事安排了一个工作,即做一个update 的级联更新,在实际操作中发现了一个问题.就是对于Oracle的更新的语法,大部分人尤其是学过SqlServer的人在使用oracle的时候对于ora ...

  9. 第8章 Docker Compose 相关问题

    8.1 你那个LNMP例子中的docker-compose.yml中有好多networks,都是什么意思啊? 我写的 LNMP 多容器互通的例子:https://coding.net/u/twang2 ...

  10. 图像处理之Canny边缘检測

    图像处理之Canny 边缘检測 一:历史 Canny边缘检測算法是1986年有John F. Canny开发出来一种基于图像梯度计算的边缘 检測算法,同一时候Canny本人对计算图像边缘提取学科的发展 ...