• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
冥海
博客园    首页    新随笔    联系   管理    订阅  订阅

我看接口(一)

1.接口的定义
(1)如何定义一个接口
用interface 后跟接口的名称,接口名用大写字母I开头
interface Icomputer
{
    int Computer(int i);   //仅需要方法的声明和一个分号,不需要大括号。默认为public

}

(2)用一个类类实现接口,两方法声明必须保持完全一致,其实就相当于在类里声明方法的主体,
方法前面要加上修饰符public,表示是一个公共的。
interface Icomputer
{
    int Computer(int i);

}

class HardWare : Icomputer  //如果没有实现这个接口,那么无法进行实现接口的声明,接口无法指向没有实现接口的类。
{
    public int Computer(int i) //在类里声明方法的主体,方法前面要加上修饰符public
      {
         return 10;

      }
}

(3)子类只能继承一个父类,但可以实现多个接口,子类的后面要跟上父类,然后,实现接口
interface Icomputer
{
    int Computer(int i);

}

class HardWare
{
   
}


class SoftWare:HardWare,Icomputer
{

     public override int Computer(int i)
      {
         return -30;

      }

}


(4)接口无法实例化,需要指向实现这个接口的类,或者声明接口为null。

(5)多接口的实现
①两个接口指向同一个类的同一个方法
class Program
{
  static void Main(string[] args)
    {
          Animal animal1 = new Animal();
          animal1.Say();

          Ianimal ianima2 = animal1;//Ianimal接口的变量指向Animal这个类的对象
          ianima2.Say();            //调用Animal这个类实现接口的方法


          Ibeasite ibeasit2 = animal1;//Ibeasite接口的变量指向Animal这个类的对象
          ibeasit2.Say();            //调用Animal这个类实现接口的方法

          Console.ReadKey();

    }
}

interface Ianimal
{
       void Say();

}


interface Ibeasite
{
        void Say();

}


class Animal:Ianimal,Ibeasite 一个类实现两个接口
{
        public void Say()
        {
            Console.WriteLine("动物叫");

        }
}
★★★★★这个其实相当于两个接口都调用一个类的同一个方法。


②一个类分别实现两个接口的同一方法。
class Program
{
        static void Main(string[] args)
        {
            Animal animal1 = new Animal();
            //animal1.Ianimal.Say(); //§§无法这样进行调用 类可以实例化,但无法进行方法的调用

            Ianimal ianima2 = animal1;
            ianima2.Say();


            Ibeasite ibeasit2 = animal1;
            ibeasit2.Say();

            Console.ReadKey();

        }
}

interface Ianimal
{
   void Say();

}

interface Ibeasite
{
   void Say();

}


class Animal:Ianimal,Ibeasite
{
   void Ianimal.Say() //前面不能有修饰符,接口的名称.方法名
    {
      Console.WriteLine("动物叫Ianimal");

    }


   void Ibeasite.Say() //前面不能有修饰符,接口的名称.方法名
    {
       Console.WriteLine("动物叫Ibeasite");

    }
}


③如果两个子类,都用到了同一个方法,那么可以把该方法写到父类里,子类进行继承。
class Program
{
        static void Main(string[] args)
        {
            Animal animal1 = new Animal();
            //animal1.Ianimal.Say(); //§§无法这样进行调用

            Ianimal ianima2 = animal1;
            ianima2.Say();


            Ibeasite ibeasit2 = animal1;
            ibeasit2.Say();

            //羊和马都有一个Chicao这个方法,所以把它写到父类里,子类进行继承
            羊 yang = new 羊();
            yang.Chicao();
            马 ma = new 马();
            ma.Chicao();
            Console.ReadKey();

        }
}

interface Ianimal
{
        void Say();

}

interface Ibeasite
{
        void Say();

}

class Animal : Ianimal, Ibeasite
{
        void Ianimal.Say()
        {
            Console.WriteLine("动物叫Ianimal");

        }


        void Ibeasite.Say()
        {
            Console.WriteLine("动物叫Ibeasite");

        }

        public void Chicao()
        {
            Console.WriteLine("吃草");
        }
}


class 羊:Animal
{

}

class 马:Animal
{
}


④★★★★★但是现在又有一个问题,假设还有一个牛吃草这个动作,但是牛吃草这个方法跟羊和马都不一样,那么怎么办?
class Program
{
        static void Main(string[] args)
        {
            Animal animal1 = new 羊();
            animal1.Chicao();        //子类继承父类Chicao的方法

            animal1 = new 牛();
            animal1.Chicao();        //子类重写方法,父类进行调用

            Ianimal ianimal =new 羊();//子类羊也要实现这个接口,且接口和子类里都有一个方法Chicao,那么接口才能调用子类的Chicao方法。
            ianimal.Chicao();       //接口调用子类的方法。

            Console.ReadKey();

        }
}


interface Ianimal
{
        void Say();

        void Chicao();
}

 
class Animal : Ianimal
{
        public void Say()
        {
            Console.WriteLine("动物说");
        }


        public virtual void Chicao()
        {
            Console.WriteLine("动物羊马吃草");
        }

}


class 羊 : Animal, Ianimal, Ibeasite
{

}

class 马 : Animal, Ianimal
{

}


class 牛 : Animal, Ianimal 
{
    public override void Chicao()  //牛如果想用自己的方法,那么要对方法进行重写。
     {
       Console.WriteLine("牛开始吃草");
     }
}

小结:
(1)用interface 进行接口的声明,接口用I作为接口名称的开头.接口中的方法,默认的是public。
接口中的方法必须与实现接口的类中的方法相一致,也可以说是在接口中不声明方法的主体,而在实现接口的类中实现接口中方法的主体,且类中的方法用public进行修饰,以便外界进行访问。

(2)多个接口可以调用一个类中的同一个方法。

(3)一个类中可以实现多个接口中的名称相同的方法,但要在类中的方法名前用 接口名.方法名

(4)如果几个子类的方法相同的话,可以把子类相同的方法,写到父类里,父类的方法名最好用virtual进行修饰。以便可以直接调用子类重写的方法。
★★子类可以对相同的方法从父类中进行继承。
★★如果子类有的方法和父类不同,那么子类只需要在前面用override进行修饰重写,其他子类仍旧可以继承父类的方法。

(5)如果接口想要调用子类的方法。那么必须在接口中声明子类的方法,且子类后面必须实现接口。

posted @ 2011-04-18 11:05  冥海  阅读(175)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3