抽象类
一些方法的实现我们无法确定,因此C#在写方法时,可以不需要写方法体,这类方法我们称为抽象方法。
格式:abstract class <类名> {//抽象方法}
示例:
//抽象类
static void Main(string[] args)
{
B b=new B ();
b.Print();
Console.ReadKey();
}
abstract class A
{
abstract public void Print();
}
/// <summary>
/// 第一步:声明抽象类
/// 第二步:声明抽象方法,并且抽象方法没有方法体
/// 第三步:派生类继承抽象类
/// 第四步:派生类内对抽象方法进行重写操作
/// </summary>
class B:A
{
public override void Print()//★override★
{
Console.WriteLine("派生类输出:B");
}
}
- 警告:
①:抽象类可以没有抽象方法,只需abstract修饰类;如果类中有抽象方法,此类一定是抽象类。
②:抽象方法的声明中不能包含static,virtual,override修饰符。
③:抽象类不能实例化对象,并且抽象方法不可以被调用,而抽象方法需要在派生类中进行方法重写(override)然后调用。
④:派生类需要对抽象类中所有抽象方法进行重写,不然会报错!
接口
一种类似于协议,接口中只有方法的说明和规定,没有方法的实现。
格式: interface <接口名> {//接口成员(方法,属性,索引器)}
class <类名> :基类名,接口1,接口2… {//类成员}
示例:
static void Main(string[] args)
{
Dog dog = new Dog();
dog.Shout();
Cat cat = new Cat();
cat.Shout();
Console.ReadKey();
}
interface Animal
//接口
{
void Shout();
}
class People
//父类
{
public void Feed()
{
Console.WriteLine("父类输出:人");
}
}
class Dog:People ,Animal
//★当子类既要继承父类,也要继承接口时:父类要在接口前,不然会报错!★
{
public void Shout()//对接口方法进行完整
{
base.Feed();//base调用父类方法
Console.WriteLine("Dog类输出:小狗汪汪...");
}
}
class Cat : People, Animal
{
public void Shout()//对接口方法进行完整
{
base.Feed();//base调用父类方法
Console.WriteLine("Cat类输出:小猫喵喵...");
}
}
- *警告:
①:接口类似抽象基类,继承接口的任何非抽象类必须实现接口的所有成员。
②:接口成员包含方法,属性,索引器,但是不能是常量,字段,构造函数和static类型。
③:接口不能直接被实例化。
④:派生类只能继承自一个基类,但是可以实现继承多个接口,中间用逗号分割。
就像天气一样 |