抽 象 类 与 接 口 抽象类与接口 抽象类与接口

1.抽象类

抽象类,抽象方法

public abstract class FutureVehicle
{
	public abstract void run();
	public abstract void fly();
}

抽象类: abstract修饰
抽象方法: abstract修饰,没有方法体
抽象类不可实例化,必须定义子类并实现相应的方法

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{
    public abstract class Vehicle
    {
        public abstract void run();

        public abstract void fly();

    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{
    class Vehicle1 : Vehicle
    {
        public override void fly()
        {
            Console.WriteLine("run...");
        }

        public override void run()
        {
            Console.WriteLine("fly...");
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{


    class Program
    {
        static void Main(string[] args)
        {
            Vehicle1 ve = new Vehicle1();
            ve.run();
            ve.fly();
        }
    }
}


抽象类与接口_抽象类

2.接口

接口,抽象方法

public interface IAudioPlayer
{
		void Play(int[] data); 
}

注意:接口名要求以大写的Ⅰ开头

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{
    public interface IPlayer
    {
        void Play(int[] data);
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{
    class MjPlayer : IPlayer
    {
        public void Play(int[] data)
        {
            Console.WriteLine("di di di ...");
        }
    }
  
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{


    class Program
    {
        static void Main(string[] args)
        {
            int[] data = { 0x34,0x12 };
            IPlayer player = new MjPlayer();
            player.Play(data);
            
        }
    }
}


抽象类与接口_抽象类_02
1接口名字要以大写I开头,这是规定
2多继承
一个类可以继承一个父类,和多个接口形如,

class YourClass : Parent, IA,IB, IC {}

3.内部类型

内部类型:在一个类内部,嵌入地定义其他类或接口例如,

public class Example{
	public class Item{
	}
	public interface IPlayer{
	}
}

内部类型的全称:命名空闻.外部类名.类名例如:

Af.Example.ItemAf.Example.IPlayer

定义在内部有特别好处吗?
没有

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{
    public class Example
    {
       // 内部类
       public class Item
        {
            public int id;
            public string name;
        }



       // 内部接口
       public interface IPlayer
        {
            void play(byte[] data);
        }
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSharp基础语法
{
    class Program
    {
        static void Main(string[] args)
        {
            CSharp基础语法.Example.Item item = new CSharp基础语法.Example.Item();
            item.id = 1314521;
            item.name = "major";

        }
    }
}