1、类:
所有类都派生自object类
没有基类规格说明的类隐式直接派生自类object。
关于类继承的其他重要内容如下
- 一个类声明的基类规格说明中只能有一个单独的类。即单继承
- 虽然类只能直接继承一个基类,但继承的层次没有限制。
基类和派生类是相对的术语。所有类都是派生类,要么派生自object,要么派生自其他类
2、抽象类
抽象类指的是设计为被继承的类,抽象类智能用作其他类的基类。
- 不能创建抽象类的实例
- 抽象类使用abstract标识
- 抽象类可以包含抽象成员和普通的非抽象成员。
- 抽象类可以派生自另一个抽象类。
任何派生自抽象类的类必须使用override关键字实现该类所有的抽象成员,除非派生类自己也是抽象类
例子:
定义一个抽象类:abstract class demo{}
子类继承父类: class demo1 :demo{}
3、抽象方法
抽象方法不能为私有的。
抽象方法必须声明在抽象类中。
抽象方法中不能含有方法体,只能在派生类中重写方法主体
抽象方法声明中不能使用static和virtual修饰符。
派生类中重写该实现,必须添加关键字override
抽象类的非抽象子类必须实现其继承的所有抽象方法和抽象访问器public abstract class Animal
{
protected string face;
//抽象类的构造函数
//(1)不要再抽象类中定义public或protected internal访问权限的构造函数
//(2)应在抽象类中定义protected或private访问权限的构造函数
//(3)如果在抽象类中定义一个protected构造函数,则在实例化派生类时,基类可以执行初始化任务
protected Animal()
{
this.face = "ahaha";
//抽象类构造方法初始化例子
//如果在抽象类中定义一个protected构造函数,则在实例化派生类时,基类可以执行初始化任务
}
//抽象方法
//(1)抽象方法是隐式的虚方法
//(2)抽象方法只允许声明在抽象类中
//(3)抽象方法不能提供实际的实现,所以没有方法体;抽象方法的实现是在非抽象的派生类中以override重写实现的
//(4)抽象方法声明中不可以使用static或者virtual修饰符
//(5)abstract关键字不能修饰静态方法或静态属性
public abstract void eat();
public abstract string Face
{
get;
}
}
public class dog : Animal
{
//重写基类中的抽象访问器
public override string Face
{
get
{
return face;
}
}
//重写基类中的抽象方法
public override void eat()
{
Console.WriteLine("狗吃骨头"+Face);
}
}
public class cat:Animal
{
public override string Face
{
get
{
return face;
}
}
public override void eat()
{
Console.WriteLine("猫吃鱼"+face);
}
}
public class panda:Animal
{
public override string Face
{
get
{
return face;
}
}
public override void eat()
{
Console.WriteLine("熊猫吃竹子"+Face);
}
}
class MainClass
{
public static void Main(string[] args)
{
dog dg = new dog();
dg.eat();
cat ct = new cat();
ct.eat();
panda pd = new panda();
pd.eat();
Console.ReadKey();
}
}