抽象方法只能够存在于抽象类中,
抽象方法只能够有声明的部分,而不能够有实现部分,例如:public abstract void a();//以";"代替"{...}"
抽象方法是默认为virtual的,所以你在声明一个抽象方法时不能够再使用virtual关键字
抽象类如果得不到继承,几乎没有什么意义,而在你继承了一个抽象类以后,对于里面的每一个抽象成员你都必须override之,至于为什么要这样,很容易理解,抽象方法仅仅有一个声明的部分,没有任何实现的代码,不override,它又有什么意义呢?
抽象类中不止可以有抽象的方法,还可以有其他类型的方法(就是非抽象的方法,非抽象的方法可以包含内容的代码)
抽象类可以继承自其他的类,同样,也可以继承自另一个抽象类
有一个共同点:抽象类和接口都不能够被建立内存实体,都必须先得到继承,然后再建立继承的那个类的实体(像Image,你就无法直接建立它的实体,因为它是一个抽象类,而Bitmap是继承自Image,你可以直接建立Bitmap的实体)
接口里面所有的内容都只能有声明的部分,不能够有实现的代码,这一点跟抽象类中的抽象方法很像,
接口里声明的所有成员都必须是public的,但是事实上,接口中的每个成员也都是默认为public的,所以你在声明它的时候不能再加一个public
接口能够继承自其他的接口
你在使用接口的时候,对接口中定义的每一个方法都必须完整地实现之,而且在实现它们的时候,你不需要使用override关键字
抽象方法只能够有声明的部分,而不能够有实现部分,例如:public abstract void a();//以";"代替"{...}"
抽象方法是默认为virtual的,所以你在声明一个抽象方法时不能够再使用virtual关键字
抽象类如果得不到继承,几乎没有什么意义,而在你继承了一个抽象类以后,对于里面的每一个抽象成员你都必须override之,至于为什么要这样,很容易理解,抽象方法仅仅有一个声明的部分,没有任何实现的代码,不override,它又有什么意义呢?
抽象类中不止可以有抽象的方法,还可以有其他类型的方法(就是非抽象的方法,非抽象的方法可以包含内容的代码)
抽象类可以继承自其他的类,同样,也可以继承自另一个抽象类
有一个共同点:抽象类和接口都不能够被建立内存实体,都必须先得到继承,然后再建立继承的那个类的实体(像Image,你就无法直接建立它的实体,因为它是一个抽象类,而Bitmap是继承自Image,你可以直接建立Bitmap的实体)
接口里面所有的内容都只能有声明的部分,不能够有实现的代码,这一点跟抽象类中的抽象方法很像,
接口里声明的所有成员都必须是public的,但是事实上,接口中的每个成员也都是默认为public的,所以你在声明它的时候不能再加一个public
接口能够继承自其他的接口
你在使用接口的时候,对接口中定义的每一个方法都必须完整地实现之,而且在实现它们的时候,你不需要使用override关键字
1
2 abstract class B//声明了一个抽象类
3 {
4 public int I = 0;//这里声明了一个普通的变量
5 public abstract void Do();//这里声明了一个抽象方法,注意这里是如何声明的
6 public abstract void Do(int i);
7 public void Do2()//这里声明了一个普通的方法
8 {
9 Console.WriteLine("Do2");
10 }
11 }
12 class A:B//因为A继承自B,所以对于B中的所有public成员,A都有
13 {
14 public override void Do() //对于每一个abstract的方法都必须override
15 {
16 Console.WriteLine("new Do1");
17 }
18 public override void Do(int i)//对于每一个abstract的方法都必须override
19 {
20 Console.WriteLine("new Do2 "+i.ToString());
21 }
22 }
23 public class C
24 {
25 public static void Main()//Main必须为静态方法
26 {
27 A a = new A();
28 a.Do();//输出"new Do1"
29 a.Do(123);//输出"new Do2 123"
30 a.Do2();//输出"Do2"
31 }
32 }
33
34
35
36
37
38 public interface I1
39 {
40 void Say();//记住,这个地方不能够使用其他的修饰符
41 public void Says();//错误,使用了public修饰符,因为Interface中的成员都是默认为public的
42 }
43 public class AA:I1
44 {
45 public void Say()//因为I1这个接口定义了一个void的Say方法,所以在这里必须予以实现
46 {
47 Console.WriteLine("Say AA!");
48 }
49 }
2 abstract class B//声明了一个抽象类
3 {
4 public int I = 0;//这里声明了一个普通的变量
5 public abstract void Do();//这里声明了一个抽象方法,注意这里是如何声明的
6 public abstract void Do(int i);
7 public void Do2()//这里声明了一个普通的方法
8 {
9 Console.WriteLine("Do2");
10 }
11 }
12 class A:B//因为A继承自B,所以对于B中的所有public成员,A都有
13 {
14 public override void Do() //对于每一个abstract的方法都必须override
15 {
16 Console.WriteLine("new Do1");
17 }
18 public override void Do(int i)//对于每一个abstract的方法都必须override
19 {
20 Console.WriteLine("new Do2 "+i.ToString());
21 }
22 }
23 public class C
24 {
25 public static void Main()//Main必须为静态方法
26 {
27 A a = new A();
28 a.Do();//输出"new Do1"
29 a.Do(123);//输出"new Do2 123"
30 a.Do2();//输出"Do2"
31 }
32 }
33
34
35
36
37
38 public interface I1
39 {
40 void Say();//记住,这个地方不能够使用其他的修饰符
41 public void Says();//错误,使用了public修饰符,因为Interface中的成员都是默认为public的
42 }
43 public class AA:I1
44 {
45 public void Say()//因为I1这个接口定义了一个void的Say方法,所以在这里必须予以实现
46 {
47 Console.WriteLine("Say AA!");
48 }
49 }