接口是完全抽象的一种约定。
接口就是用来实现的。
语法:
[访问修饰符] interface 接口名
{
//接口成员定义
}
接口只有方法、属性、索引和事件的声明
接口是用来实现的,所有成员默认为public
interface IWalkable
{
//返回类型 方法名(参数列表);
void Walk();
}
interface ISoundable
{
void Sound();
}
class="p0"> abstract class Animal : IWalkable, ISoundable
{
public abstract void Walk();
public abstract void Sound();
}
class Person : Animal
{
public override void Walk()
{
Console.WriteLine("我是一个人,用两只脚在行走中……");
}
public override void Sound()
{
Console.WriteLine("我是一个人,在说话,用到是语言哦");
}
}
class Teacher : Person
{
// 老师,没有重写父类方法
}
class Student : Person
{
public override void Sound()
{
Console.WriteLine("我是学生重写的Sound方法");
}
//public override void Walk()
//sealed是密闭的意思,表示从这里开始不允许再被Student的子类重写了
public sealed override void Walk()
{
Console.WriteLine("我是学生重写的Walk方法");
}
}
class Child : Student
{
public override void Sound()
{
Console.WriteLine("这是小孩的Sound");
}
public new void Walk()
{
Console.WriteLine("小孩的Walk");
}
}
class Cat : Animal
{
public override void Walk()
{
Console.WriteLine("猫猫走猫步,好迷人……");
}
public override void Sound()
{
Console.WriteLine("喵喵喵……");
}
}
class Car : IWalkable
{
public void Walk()
{
Console.WriteLine("我是一辆卡车,走在大路上……");
}
}
class Radio : ISoundable
{
public void Sound()
{
Console.WriteLine("小喇叭,有开始广播啦!!!");
}
}
class Program
{
static void Main(string[] args)
{
IWalkable[] walkObjects = { new Person()
, new Cat()
, new Car()
, new Teacher()
, new Student()
, new Child()};
for (int i = 0; i < walkObjects.Length; i++)
{
walkObjects[i].Walk();
}
object obj = new Child();
IWalkable iWalk = (IWalkable)obj;
Child chi = (Child)obj;
iWalk.Walk(); //我是学生重写的Walk方法
chi.Walk(); //小孩的Walk
//new为隐藏 over重写 隐藏看类型 重写只管新爸
Console.WriteLine("\n----------------------\n");
ISoundable[] soundObjects = { new Person()
, new Cat()
, new Radio()
, new Teacher()
, new Student()};
for (int i = 0; i < soundObjects.Length; i++)
{
soundObjects[i].Sound();
}
Console.ReadKey();
}
}