c# 抽象类(abstract)
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)的更多相关文章
- php中的抽象类(abstract class)和接口(interface)
一. 抽象类abstract class 1 .抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 2 ...
- PHP的接口类(interface)和抽象类(abstract)的区别
<?php /** * 接口类:interface * 其实他们的作用很简单,当有很多人一起开发一个项目时,可能都会去调用别人写的一些类, * 那你就会问,我怎么知道他的某个功能的实现方法是怎么 ...
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
JAVA之旅(七)--final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展 OK,我们继续学习JAVA,美滋滋的 一.final 我们来 ...
- [PHP] 抽象类abstract的回顾
1.abstract定义为抽象的类不能被实例化. 2.它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的. 3.被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实 ...
- C++虚函数virtual,纯虚函数pure virtual和Java抽象函数abstract,接口interface与抽象类abstract class的比较
由于C++和Java都是面向对象的编程语言,它们的多态性就分别靠虚函数和抽象函数来实现. C++的虚函数可以在子类中重写,调用是根据实际的对象来判别的,而不是通过指针类型(普通函数的调用是根据当前指针 ...
- 高级类特性----抽象类(abstract class)
抽象类(abstract class) 随着继承层次中一个个新子类的定义,类变得越来越具体,而父类则更一般,更通用.类的设计应该保证父类和子类能够共享特征.有时将一个父类设计得非常抽象,以至于它没有具 ...
- Java中的抽象类abstract
abstract定义抽象类 abstract定义抽象方法,只需要声明,不需要实现 包含抽象方法的类是抽象类 抽象类中可以包含抽象方法,也可以包含普通方法 抽象类不能直接创建,可以定义父类引用变量指向子 ...
- Day06_30_抽象类(Abstract)
抽象类 Abstract 什么是抽象类? 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就 ...
- c#中抽象类(abstract)和接口(interface)的相同点与区别
相同点: 1.都可以被继承 2.都不能被实例化 3.都可以包含方法声明 4.派生类必须实现未实现的方法 区别: 1.抽象基类可以定义字段.属性.方法实现.接口只能定义属性.索引器.事件.和方法声明,不 ...
- C# 抽象类abstract
不能初始化的类被叫做抽象类,它们只提供部分实现,但是另一个类可以继承它并且能创建它们的实例,有未被实现的方法.抽象类不可以new对象. "一个包含一个或多个纯虚函数的类叫抽象类,抽象类不能被 ...
随机推荐
- rem的使用方法
首先写入一下代码 <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" cont ...
- eclipse 查看源代码
文地址:http://blog.csdn.net/sushengmiyan/article/details/18798473 本文作者:sushengmiyan 我们在使用Eclipse的时候,经常是 ...
- 在EntityFramework(EF)中删除主从表记录
删除主表: 如果要删除单个的Book对象,由于启用了级联删除,干掉一个Book,它所关联的所有BookReview也一并删除了. (说的简单,如果用Attach方法或者Remove,加修改删除状态, ...
- Mac下使用安装MongoDB
1.安装方法1:Mac电脑上面安装很简单,直接下载需要的版本解压即可: 下载网址 https://www.mongodb.com/download-center?jmp=nav#community 方 ...
- Nginx系列之负载均衡和反响代理
NGINX介绍 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行 其特点是占有内存少,并发能力强,事实上nginx ...
- GIT快速学习
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513ae ...
- 《从零开始学Swift》学习笔记(Day 50)——扩展计算属性、方法
原创文章,欢迎转载.转载请注明:关东升的博客 可以在原始类型上扩展计算属性,包括实例计算属性和静态计算属性.添加计算属性的定义,与普通的计算属性的定义是一样的. 实例计算属性示例:在网络编程时,为了减 ...
- Cocos2d-x Lua中使用标签
游戏场景中的文字包括了静态文字和动态文字.静态文字如下图所示游戏场景中①号文字“COCOS2DX”,动态文字如图4-1所示游戏场景中的②号文字“Hello World”.静态文字一般是由美工使用Pho ...
- joisino's travel
D - joisino's travel Time limit : 2sec / Memory limit : 256MB Score : 400 points Problem Statement T ...
- 前台传递给后台的JSON字符串中的引号 “” 在JAVA后台被转义为 "
前台传递给后台的JSON字符串中的引号 "" 在JAVA后台被转义为 " 1.问题: 前台数据,JSON字符串带有引号 "" ,数据被传递到后台 ...