接口的實現和繼承


實現過程必須在實現接口的類中完成

類繼承具有單根性,接口可多重繼承

父接口也成為該接口的顯示基接口

接口多重繼承時,派生接口名與父接口用冒號隔開,多個父接口之間用逗號隔開

 

 

接口的成員之間不能同名,繼承的成員不用再聲明,但接口可以定義與繼承而來的成員同名的成員,這稱為接口成員覆蓋了繼承而來的成員,這不會導致錯誤,但編譯器會給出一個警告,關閉警告提示的方法時在成員聲明前加上一個new關鍵字,但如果沒有覆蓋父接口中的成員,使用new關鍵字會導致編譯器發出警報.

interface Interface1
	{
		Void read();
		//不同接口(不包含派生)中允許有同名的成員,如我在Interface2中定義read()也是可以的
		String read()
		(
get;
		Set;
		//同一接口中的成員名不能重名,及時類型不同
)
}


//接口可以多重繼承,多重繼承要用逗號隔開。父接口要與派生接口冒號隔開
//如我Interface1接口中有個void read()成員
Interface Interface3:Interface1,Interface2
{
	new Void read();
	//如果派生接口中對顯示基接口中的成員進行重新定義時,需要使用new來解除警報

}

 

任務實施實例

 

 

老鷹、麻雀、鴕鳥、都是鳥類,根據三者的共性,提取出鳥類作為父類,並且具有各自的特點,老鷹吃小雞,麻雀吃糧食,鴕鳥吃青草

老鷹和麻雀都會飛,如何實現這個“飛”的功能

開放封閉原則

定義

軟件實體應該可以擴展,但是不可以修改

 

特性

對擴展是開放的

對修改是封閉的,開放既可以操作,關閉既不可以操作

 

1) 在父類中添加“飛”,但是鴕鳥不會飛,所以不能再父類中;

2) 在會飛的子類中添加“飛”功能。完全可以,但是違背了開放封閉原則,下次我們新加一個天鵝,我們還要去代碼去查看“飛功能是如何實現的”,然后在天鵝中添加“飛”方法,相同的功能。重復的代碼。明顯不合理,也不利於擴展

假如我在新增一個“氣球”,我繼承父類合適嗎?很顯然不行,我們需要一種規則,這種規則就是接口

3) 老鷹和麻雀都會飛就實現了“飛”這個接口,鴕鳥不會飛,就不實現這個接口。

 

例子:利用接口實現老鷹和麻雀會飛的方法

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

namespace 接口繼承與實施
{
    class tuon:niaol,Iflyable
    {
        public void fly()
        {
            Console.WriteLine("我是鴕鳥,我回跑");
         }
        public override void write()
        {
            Console.WriteLine("我是鴕鳥,我吃青草");
        }
    }
}

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

namespace 接口繼承與實施
{
    class laoy:niaol,Iflyable
    {
        //接口實現過程需要在實現接口的類中進行實現
        public void fly()
    {
        Console.WriteLine("我是老鷹,我會飛");
    }
        public override void write()
        {
            Console.WriteLine( "我是老鷹,我吃小雞");
        }
    }
}

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

namespace 接口繼承與實施
{
    abstract class niaol
    {
        public abstract void write();
       
    }
}


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

namespace 接口繼承與實施
{
    class Program
    {
        static void Main(string[] args)
        {   
            //聲明一個接口數組flys  用來保存老鷹和鴕鳥類的接口方法
            Iflyable[] flys = { new laoy(),new tuon()};
            //立方foreah循環便利來輸出老鷹類和鴕鳥類中的接口方法
            foreach (Iflyable outfly in flys)

            {
                outfly.fly(); //用輸出outfly參數來輸出接口的方法
            }
            Console.ReadKey();
        }
    }
}


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

namespace 接口繼承與實施
{
    interface Iflyable
    {
        //定義一個會飛的一個接口的方法
        void fly();
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM