抽象类和接口的区别如下:
1、在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。
2、在接口中无成员变量,而抽象类中可有成员变量。
3、引进接口主要是为了解决多继承的问题。
4、接口中不能有非抽象方法,但抽象类中可以有。
5、一个类能实现多个接口,但只能有一个父类。
6、接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口。
关于抽象类的私有方法:
抽象类不能被实例化。
抽象类可以有私有的构造函数,私有的构造函数使得子类不能继承该抽象类,因为子类在继承了父类后,
在实例化化的时候要首先调用父类的构造函数,但此处该构造函数被声明为私有的,不能访问,所以子类无法被构造出来。
所以,拥有私有的构造函数的抽象类不能被继承。
拥有私有的构造函数的抽象类的静态方法可被直接调用。
具体类中的私有构造函数,这种情况最常见的是在单例模式中。
抽象类的测试代码:(说明和具体类一样,子类在构造前先调用父类的构造方法)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 namespace ConsoleApplication2
5 {
6 class Program
7 {
8 static void Main(string[] args)
9 {
10 SubUtilityClass subUtilityClass = new SubUtilityClass();
11 subUtilityClass.diplay();
12 Console.Read();
13 }
14 }
15
16 abstract class SupperUtilityClass
17 {
18 public SupperUtilityClass()
19 {
20 Console.WriteLine("SupperUtility's constructed function invoked");
21 }
22
23 public virtual void diplay()
24 {
25 Console.WriteLine(" SupperUtility's display method invoked");
26 }
27 }
28
29 class SubUtilityClass : SupperUtilityClass
30 {
31 public SubUtilityClass()
32 {
33 Console.WriteLine("SubUtility's constructed function method invoked");
34 }
35
36 public override void diplay()
37 {
38 Console.WriteLine("SubUtility's display method invoked");
39 }
40 }
41 }
42