抽象类详解一
using System;
namespace cSharpJichu
{
public class BaseClass
{
private string a = string.Empty;
public void RunAtBaseClassA()
{
Console.WriteLine("RunAtBaseClassA");
}
public virtual void RunAtBaseClassVirtual()
{
Console.WriteLine("RunAtBaseClassVirtualA");
}
}
public abstract class AbstractClassA : BaseClass
{
string aStr = string.Empty;
public abstract void AbstractMethodA();
public void AbstractClass()
{
Console.WriteLine("RunAtAbstractClassA");
}
}
class ExtendAbstractClass : AbstractClassA
{
private string a = string.Empty;
public override void AbstractMethodA()
{
Console.WriteLine("RunAtExtendAbstractClass");
}
}
public abstract class AbstractClassB
{
string aStr = string.Empty;
internal abstract void AbstractMethodB();
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("------------------ 以下是抽象类测试 ------------------------");
ExtendAbstractClass abc = new ExtendAbstractClass();
abc.AbstractClass();
abc.AbstractMethodA();
Console.WriteLine("------------------ 抽象类也可以继承基类 ------------------------");
Console.WriteLine("------------------ 下面的是抽象类继承了BaseClass类后 ------------------------");
Console.WriteLine("------------------ 继承抽象类的子类ExtendAbstractClass对象访问BaseClass类的方法 ------------------------");
abc.RunAtBaseClassA();
abc.RunAtBaseClassVirtual();
Console.WriteLine("------------------ 以上是抽象类测试 ------------------------");
Console.Read();
}
}
namespace cSharpJichu
{
public class BaseClass
{
private string a = string.Empty;
public void RunAtBaseClassA()
{
Console.WriteLine("RunAtBaseClassA");
}
public virtual void RunAtBaseClassVirtual()
{
Console.WriteLine("RunAtBaseClassVirtualA");
}
}
public abstract class AbstractClassA : BaseClass
{
string aStr = string.Empty;
public abstract void AbstractMethodA();
public void AbstractClass()
{
Console.WriteLine("RunAtAbstractClassA");
}
}
class ExtendAbstractClass : AbstractClassA
{
private string a = string.Empty;
public override void AbstractMethodA()
{
Console.WriteLine("RunAtExtendAbstractClass");
}
}
public abstract class AbstractClassB
{
string aStr = string.Empty;
internal abstract void AbstractMethodB();
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("------------------ 以下是抽象类测试 ------------------------");
ExtendAbstractClass abc = new ExtendAbstractClass();
abc.AbstractClass();
abc.AbstractMethodA();
Console.WriteLine("------------------ 抽象类也可以继承基类 ------------------------");
Console.WriteLine("------------------ 下面的是抽象类继承了BaseClass类后 ------------------------");
Console.WriteLine("------------------ 继承抽象类的子类ExtendAbstractClass对象访问BaseClass类的方法 ------------------------");
abc.RunAtBaseClassA();
abc.RunAtBaseClassVirtual();
Console.WriteLine("------------------ 以上是抽象类测试 ------------------------");
Console.Read();
}
}
}
运行结果:
总结:
1.抽象类的方法没有实现体,只有声明.
2.抽象类可以包含抽象方法,非抽象方法,变量 .
3.包含有抽象方法的类一定是抽象类.
4.抽象类不能被实例化.
5.抽象方法不能用private修饰,其他的修饰符则可以.
6.当子类继承抽象类时,子类必须重写抽象类的所有抽象方法.
7.抽象类也可以继承基类,抽象类继承了BaseClass类后,继承抽象类的子类ExtendAbstractClass对象访问BaseClass类的方法.
8.抽象类在继承基类时,基类的访问修饰符的权限不能小于抽象类的访问修饰符.