初见继承威力

简介:

我们来描述一个数据结构,一个公司,下有很多部门,一个部门有很多职员。

ok,我们先实现职员数据结构
 

1   public   class  Staff
2   {
3 //默认为男性
4 public Staff(string name):this(name,Sex.Man)
5 {
6 }

7 public Staff(string name,Sex sex)
8 {
9 Name = name;
10 Sex = sex;
11 }

12
13 public readonly string Name;
14 public readonly Sex Sex;
15 }

16
17   public   enum  Sex
18   {
19 Man,
20 Female
21 }

then, 我们再来处理职员的集合

1 public   class  StaffCollection : System.Collections.CollectionBase
2   {
3
4 public int Add(string name)
5 {
6 return Add(name, Sex.Man);
7 }

8
9 public int Add(string name, Sex sex)
10 {
11 return Add(new Staff(name, sex));
12 }

13 public int Add(Staff staff)
14 {
15 return this.List.Add(staff);
16 }

17 public void AddRange(Staff[] staffs)
18 {
19 for (int i = 0; i <= staffs.Length - 1; i++)
20 {
21 Add(staffs[i]);
22 }

23 }

24
25 public void Remove(Staff staff)
26 {
27 this.List.Remove(staff);
28 }

29
30 public Staff[] ToArray()
31 {
32 Staff[] tmpStaffs = new Staff[this.Count];
33 for (int i = 0; i <= this.Count - 1; i++)
34 {
35 tmpStaffs[i] = (Staff)this[i];
36 }

37 return tmpStaffs;
38 }

39
40 public Staff this[int index]
41 {
42 set
43 {
44 this.List[index] = value;
45 }

46 get
47 {
48 return (Staff)this.List[index];
49 }

50 }

51
52 }



我们再定义部门的数据结构,该结构包含了职员的集合
 

1 public   class  Department
2   {
3 public StaffCollection Staffs=new StaffCollection();
4
5 public Department(string name)
6 {
7 Name=name;
8 }

9 public readonly string Name;
10 }


再对StaffCollection依葫芦画瓢,再写一个DepartmentCollection
 

1 public   class  DepartmentCollection : System.Collections.CollectionBase
2   {
3 public int Add(string departmentName)
4 {
5 return Add(new Department(departmentName));
6 }

7
8 public int Add(Department department)
9 {
10 return this.List.Add(department);
11 }

12 public void AddRange(Department[] departments)
13 {
14 for (int i = 0; i <= departments.Length - 1; i++)
15 {
16 Add(departments[i]);
17 }

18 }

19
20 public void Remove(Department department)
21 {
22 this.List.Remove(department);
23 }

24
25 public Department[] ToArray()
26 {
27 Department[] tmpDepartments = new Department[this.Count];
28 for (int i = 0; i <= this.Count - 1; i++)
29 {
30 tmpDepartments[i] = (Department)this[i];
31 }

32 return tmpDepartments;
33 }

34
35 public Department this[int index]
36 {
37 set
38 {
39 this.List[index] = value;
40 }

41 get
42 {
43 return (Department)this.List[index];
44 }

45 }

46
47
48 }


注意观察DepartmentCollection和StaffCollection的ToArray方法,封装了ToArray复杂性。

最后,我们实现公司的结构
 

1   public   class  Company
2   {
3 public DepartmentCollection Departments = new DepartmentCollection();
4 }



现在我们有了5个类
Company
---DepartmentCollection
------Department
---------StaffCollection
------------Staff

我们看下具体的应用
 

1 public   static   void  Main( string [] args)
2   {
3
4 Company com = new Company();
5 com.Departments.Add("HR");
6 com.Departments.Add("Market");
7 com.Departments.Add("Development");
8
9 com.Departments[0].Staffs.Add("Alice");
10 com.Departments[0].Staffs.Add("Amy");
11 com.Departments[0].Staffs.Add("Ellen");
12 com.Departments[2].Staffs.Add("Albert");
13 com.Departments[2].Staffs.Add("Mark");
14 com.Departments[2].Staffs.Add("Kevin");
15 com.Departments[2].Staffs.Add("Neil");
16
17 for (int i = 0; i <= com.Departments.Count - 1; i++)
18 {
19 System.Console.WriteLine(com.Departments[i].Name);
20 for (int j = 0; j <= com.Departments[i].Staffs.Count - 1; j++)
21 {
22 System.Console.WriteLine("/t{0}{1}", com.Departments[i].Staffs[j].Name, com.Departments[i].Staffs[j].Sex == Sex.Man ? "先生" : "女士");
23 }

24 }

25
26
27 }


继续优化,请看下篇,索引器的重载


本文转自shyleoking 51CTO博客,原文链接:http://blog.51cto.com/shyleoking/806277


相关文章
|
5月前
|
Java 程序员
让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
47 5
|
5月前
|
设计模式 Java
【惊天揭秘】Java编程绝技大曝光:接口、抽象类、静态类与非静态类的神秘面纱终被揭开!
【8月更文挑战第22天】Java支持面向对象编程,通过接口、抽象类、静态类(如枚举与工具类)及普通类实现设计原则。接口定义行为规范,允许多重继承;抽象类含未实现的抽象方法,需子类完成;静态类常为工具类,提供静态方法;普通类则实例化对象。恰当运用这些结构能提升程序质量。
47 2
|
7月前
|
Java
Java面向对象编程新篇章:多态,你准备好了吗?
【6月更文挑战第17天】Java的多态性是面向对象编程的核心,它允许通过统一的接口处理不同类型的对象。例如,在一个虚拟宠物游戏中,抽象类`Pet`定义了`speak()`方法,猫、狗和鹦鹉等子类各自重写此方法以实现独特叫声。在`main`方法中,使用`Pet`类型的引用创建子类对象并调用`speak()`,多态机制确保调用实际对象的方法,实现代码的灵活性和可扩展性。通过多态,我们能以更低的耦合度和更高的复用性编写更优雅的代码。
49 3
|
3月前
|
安全 程序员 编译器
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
【C++篇】继承之韵:解构编程奥义,领略面向对象的至高法则
102 11
|
7月前
|
Java 编译器 数据库连接
JAVA注解:代码界的“隐形翅膀”?!
【6月更文挑战第29天】Java注解,编程的“隐形翅膀”,提供编译检查、框架集成及自定义元数据功能。如@Override确保方法重写正确,@Autowired在Spring中自动装配Bean。通过自定义注解,开发者能创造独特代码逻辑。例如,定义@SpecialProcessing注解标记需特殊处理的方法,增强代码可读性和可扩展性。利用注解,让代码飞翔在更广阔的世界。
42 1
|
7月前
|
C++
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
c++primer plus 6 读书笔记 第十四章 C++中的代码重用
|
存储 编译器 C++
C++继承和多态核心重点知识刨析,一文必拿下
C++继承和多态核心重点知识刨析,一文必拿下
C++继承和多态核心重点知识刨析,一文必拿下
|
设计模式 关系型数据库 Scala
咖啡店的项目引出装饰者模式 | 学习笔记
快速学习咖啡店的项目引出装饰者模式
咖啡店的项目引出装饰者模式 | 学习笔记
|
JavaScript 前端开发 API
【重温基础】14.元编程
【重温基础】14.元编程
257 0
|
程序员 C++
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)
148 0
当我学会了类,就离领悟面向对象编程不远了(基础)!!(熬夜爆肝)