抽象和接口

抽象类和抽象方法

抽象方法:1 带抽象方法的类必须是抽象类,若不是要在类加abstract修饰符

     2 描述抽象方法时必须只是一个方法体,无需后面的大括号及内容

     3 抽象方法必须在子类中重写

     4 静态方法和抽象方法不能是一个方法

 

抽象类:   1 抽象类不能被实例化

     2 抽象类和最终类不能使同一个类,因为抽象类本身不能实例化,必须被继承才有意义

     3 抽象类的非抽象子类必须包含抽象类的所有方法和成员,其中抽象方法需要重载

 1 //抽象类
 2     public abstract class Abstract_test
 3     {   //计算面积
 4         public abstract double Area();  //抽象方法
 6     }
 7 
 8     public class Circle : Abstract_test
 9     {
10         private double pi = 3.14;
12         public double r = 0;
13 public Circle(){} 18 public Circle(double r){this.r = r;}22 23 public override double Area() //继承抽象方法时必须重载 24 { 26 return this.pi * this.r * this.r; 27 }

若父类中已重写过部分的抽象方法,子类只需重写未重写的方法(也可全部重载)

 1         public abstract class Abstract
 2         {
 3             public abstract void test1();
 4             public abstract void test2();
 6         }
 7 
 8         public abstract class Test1:Abstract
 9         {
10             public override void test1()
11             {
12                 Console.WriteLine("test1");
13             }
14         }
15 
16         public class Test2:Test1
17         {
18             public override void test2()
19             {
20                 Console.WriteLine("test2");
22             }
23         }

 接口

规则:

1 接口可定义方法,带参数属性,事件,不能定义字段,静态变量等

2 接口成员不能有修饰符

3 接口可以被多个类继承,一个类也可以继承多个接口

4 接口不能随便修改

5 可用new隐藏从基接口继承的成员

 1 public interface  IClass1  //interface为接口
 2     {
 3         void test1();
 5         void test2();
 7     }
 8 
 9     public interface IClass2
11     {   //接口中只能定义以下三种类型
12         string testString { get; set; }  //属性
14         void test3();               //方法
16         event EventHandler testEvent;  //事件
17     }
18 
19     public interface IClass3 : IClass1  //接口的继承,子接口中自动继承了父接口所有的方法
20     {
21         void test5();
23     }
24 
26     public class Class3 : IClass2, IClass3   //接口可多继承,必须把继承接口中的方法属性补全
27     {
28         string IClass2.testString { get ; set ; }
30         event EventHandler IClass2.testEvent
31         {
32             add => throw new NotImplementedException();
37             remove => throw new Not ImplementedException();41         }
43         void IClass1.test1()
44         {
45             throw new NotImplementedException();
46         }
48         void IClass1.test2()
49         {
50             throw new NotImplementedException();
51         }
53         void IClass2.test3()
54         {
55             throw new NotImplementedException();
56         }
58         void IClass3.test5()
59         {
60             throw new NotImplementedException();
61         }
62     }

接口和抽象类都可作为类型声明变量,并利用多态性进行筛选操作

接口和抽象的区别

1 修饰符不同

2 抽象类是类,类只能被类单继承;而接口可以被多继承

3 接口只能定义属性方法和事件;而抽象可以定义几乎所有

4 抽象类中可以有非抽象方法,即普通方法;而接口中只能有签名

5 接口不能使用访问修饰符,隐式为公共;抽象成员不可以抽象的,但可以是私有、保护、内部或者受保护的内部成员

posted @ 2018-09-22 15:26  邢韬  阅读(171)  评论(0编辑  收藏  举报