Interface(接口):是一种规则,要求继承类必需实现所有声明的成员,方法是公开的。
Virtual方法(虚方法):可以在继承类里 Override覆盖重新的方方法,有自己的方法体。派生类可使用,可重写。
Abstract(抽象方法):只能在抽象类种修饰,并且没有具体的实现,抽象方法在派生类种 使用Override重写。
Virtual方法(虚方法):可以在继承类里 Override覆盖重新的方方法,有自己的方法体。派生类可使用,可重写。
Abstract(抽象方法):只能在抽象类种修饰,并且没有具体的实现,抽象方法在派生类种 使用Override重写。
一、
抽象类
抽象函数:只有函数定义,没有函数体的函数。例如:
abstract
void
fun()
抽象类:
使用abstract定义的类称之为抽象类。记住:必须要被继承!
特性:1.抽象类不能生成对象(生成一个对象就是new一个它,但抽象类中没有方法体,所以生成对象没有意义)
2.如果一个抽象类中含有一个抽象函数,那么这个类必须声明为抽象类;
3.如果你声明了一个抽象类,其中也可以不写抽象方法,这种情况一般用于不想让其生成对象时
抽象类的构造函数()
(1)不要再抽象类中定义public或protected internal访问权限的构造函数
(2)应在抽象类中定义protected或private访问权限的构造函数
扫描二维码关注公众号,回复:
2637954 查看本文章
(3)如果在抽象类中定义一个protected构造函数,则在实例化派生类时,基类可以执行初始化任务
using System;
using System.Collections;
//抽象类
public abstract class Animal
{
protected string face;
//声明为protected的构造函数,在实例化派生类时,基类可以执行初始化工作
protected Animal() { this.face = "^_^"; /*抽象类构造函数初始化的例子*/}
public abstract void eat();
public abstract string Face
{
get;
}
}
public class dog : Animal
{
//重写基类中的抽象访问器Face
public override string Face
{
get
{
return face;
}
}
//重写基类中的抽象方法eat
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);
}
}
public class MainFun
{
static void Main()
{
Animal[] anim = new Animal[3];
anim[0] = new dog();
anim[1] = new cat();
anim[2] = new panda();
anim[0].eat();
anim[1].eat();
anim[2].eat();
Console.ReadKey();
}
}
二: 虚方法
虚方法其实跟抽象差不太多,虚方法有方法体而抽象方法没有方法体,虚方法不一定非要重写出来,
virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。
java B类继承A类 B中方法c重载了A中c 其实就跟 C#中的虚方法一样 只是java中是默认的不需要再写了
C# B类继承A类 B中方法c重载(override)了A中虚方法(virtual)c
三:接口
为什么要用接口,接口有什么用?
首先接口具有约束作用,可以限定类必须实现某些功能,接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构;
其次,接口减少了代码量,便于扩展,比如银行 账户等级越高,所具有的功能就越多(实现更多的接口),一个类可以有多个接口(interface);
再次,规范多个开发人员的代码,