1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 //多態------------
5 namespace virtuaL//虛方法
6 {
7 class a
8 {
9 public virtual void aA()
10 {
11 Console.WriteLine("a.aA");
12 }
13 }
14 class b:a
15 {
16 public override void aA()
17 {
18 Console.WriteLine("b.aA");
19 }
20 }
21 class c : a
22 {
23 public new void aA()
24 {
25 Console.WriteLine("c.aA");
26 }
27 }
28 class d : b
29 {
30 public override void aA()
31 {
32 Console.WriteLine("d.aA");
33 }
34 }
35 class program
36 {
37 static void Main()
38 {
39 b newB = new b();
40 newB.aA();
41 a newA = new b();//b類繼承於a類,b類裏包含了a類的成員,這裏是實例化b類裏的a類成員
42 //只有通過聲明瞭override的方法類才能替換virtual基類的方法
43 newA.aA();
44 a newC = new a();//這裏沒有通過b類(包含override的方法類)訪問a類,不實現virtral方法
45 newC.aA();
46
47 a newcA = new c();
48 newcA.aA();
49 c newcB = new c();
50 newcB.aA();
51
52 a nA = new d();
53 nA.aA();
54 b nB = new d();
55 nB.aA();
56
57 }
58 }
59 //class program
60 //{
61 // static void Main()
62 // {
63 // gongshI[] gonG = new gongshI[3];//聲明類數組
64 // gonG[0] = new jinlI("經理");//用基類聲明一個繼承類 //沒有事先聲明jinlI類的實例,因而這是要用new聲明
65 // gonG[1] = new zhuguaN("主管");
66 // gonG[2] = new zhuzanG("組長");
67 // foreach(gongshI p in gonG)
68 // {
69 // p.startworK();//應用了多態,這時執行用於替代基類的方法
70 // }
71 // }
72 //}
73 //class gongshI
74 //{
75 // protected string namE;//聲明一個繼承類可以訪問的成員
76 // internal gongshI() { }//構造器,編譯器規定要有的,在這裏不起實質作用
77 // internal gongshI(string nameA)//爲namE賦值
78 // {
79 // this.namE = nameA;
80 // }
81 // internal virtual void startworK()//多態
82 // {
83 // Console.WriteLine(namE + "開始工作---");
84 // }
85 //}
86 //class jinlI : gongshI
87 //{
88 // internal jinlI(string nameA) : base(nameA) { }//base:訪問基類各種成員類型, //構造器 //base會訪問基類成員,因爲執行了基類構造器,base(name)表示基類構造器internal gongshI(string nameA)
89 // internal override void startworK()//多態
90 // {
91 // base.startworK();//在繼承類調用基類的方法 //先執行基類的方法,在執行本類方法
92 // Console.WriteLine("安排主管工作");
93 // }
94 //}
95 //class zhuguaN : gongshI
96 //{
97 // internal zhuguaN(string nameA) : base(nameA) { }
98 // internal override void startworK()//多態
99 // {
100 // base.startworK();
101 // Console.WriteLine("安排組長工作");
102 // }
103 //}
104 //class zhuzanG : gongshI
105 //{
106 // internal zhuzanG(string nameA) : base(nameA) { }
107 // internal override void startworK()//多態
108 // {
109 // base.startworK();
110 // Console.WriteLine("安排員工生產");
111 // }
112 //}
113
114
115
116 //多層繼承多個虛方法
117 //class Program
118 //{
119 // static void Main(string[] args)
120 // {
121 // C cA = new C();
122 // A aA = cA;//替代A aA = new C();
123 // B bA = cA;
124 // cA.consolE();
125 // bA.consolE();
126 // aA.consolE();
127
128 // cA.consoleA();
129 // bA.consoleA();
130 // aA.consoleA();
131 // }
132 //}
133 //class A
134 //{
135 // internal virtual void consolE()//用virtral聲明一個虛方法,一般和override一起使用
136 // {
137 // Console.WriteLine("this is a class A");
138 // }
139 // internal virtual void consoleA()
140 // {
141 // Console.WriteLine("this is a class A2");
142 // }
143 //}
144 //class B : A
145 //{
146 // internal override void consoleA()//override把父類聲明的虛方法改寫成自己聲明的方法.!:執行時override聲明的方法會到父類裏找名稱和它相同的virtual聲明的虛方法,因而
147 // {
148 // Console.WriteLine("this is a class B:A");
149 // }
150 // internal override void consolE()
151 // {
152 // Console.WriteLine("this is a class B:A2");
153 // }
154 //}
155 //class C : B
156 //{
157 // internal override void consolE()
158 // {
159 // Console.WriteLine("this is a class C:B");
160 // }
161 // internal override void consoleA()
162 // {
163 // Console.WriteLine("this is a class C:B2");
164 // }
165 //}
166
167
168 //class program
169 //{
170 // static void Main()
171 // {
172 // zhileiA zhiA = new zhileiA();
173 // zhileiB zhiB = new zhileiB();
174
175 // fuleI fuzhiA = zhiA;
176 // fuleI fuzhiB = zhiB;
177
178 // zhiA.voiD();
179 // fuzhiA.voiD();
180
181 // zhiB.voiD();
182 // fuzhiB.voiD();
183 // }
184 //}
185 //class fuleI
186 //{
187 // internal virtual void voiD()
188 // {
189 // Console.WriteLine("父類");
190 // }
191 //}
192 //class zhileiA : fuleI
193 //{
194 // internal override void voiD()
195 // {
196 // Console.WriteLine("子類A");
197 // }
198 //}
199 //class zhileiB : fuleI
200 //{
201 // internal override void voiD()
202 // {
203 // Console.WriteLine("子類B");
204 // }
205 //}
206
207
208 }
209
210
211
virtual虛方法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.