抽象思维之共性_抽象类的作用_接口的作用_抽象类和接口的区别(三)

四、用库中的接口实现

     在上面的冒泡排序中,我们自己定义了接口,其实在库中,已经有定义好的比较大小接口,我们直接继承过来用即可。下面是使用库中的接口予以实现,冒泡排序,

     用库中的接口实现和用自定义的接口实现,大同小异,下面我们仅给出这种方式的代码:

     person类:

 

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

namespace InterfaceBubleSort
{
    public class Person:IComparable
    {
        private int age;
        public int Age
        {
            get
            {
                if (0<age&&age<100)
                {
                    return age;
                }
                else
                {
                    Console.WriteLine("年龄输入错误!");
                    return 0;
                }
            }
            set
            {
                if (0<value&&value<100)
                {
                    age = value;
                }
                else
                {
                    Console.WriteLine("年龄输入错误!");
                }
            }
        }

        private string name;

        public string Name
        {
            get { return name; }
            set { name = value; }
        }

        public Person(string name,int age)
        {
            this.age = age;
            this.name = name;
        }


        #region IComparable 成员

        public int CompareTo(object obj)
        {
            return this.Age - ((Person)obj).Age;
        }

        #endregion
    }
}
冒泡排序类:

 

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

namespace InterfaceBubleSort
{
    public  class BubleSort
    {
        public void BubleSortMethord(IComparable[] array)
        {
            for (int i = 0; i < array.Length; i++)
   {
       for (int j = 0; j < array.Length-i-1; j++)
       {
                    if (array[i].CompareTo(array[i + 1]) > 0)
                 {
                        IComparable temp = array[i];
                        array[i]=array[i+1];
                        array[i+1]=temp;
                 }      
       }
   }
        }

      
    }
}

 

主函数类:

 

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

namespace InterfaceBubleSort
{
    class MainEntry
    {

        static void Main(string[] args)
        {
            BubleSort bublesort = new BubleSort();
            Person a = new Person("白连启", 23);
            Person b = new Person("侯勇蛟",24);
            Person c = new Person("李娜",23);
            Person d = new Person("李国璋",24);
            Person[] persongs = { a,b,c,d};
            Console.WriteLine("未排序时:\n");
            foreach (var item in persongs)
            {
                Console.WriteLine(item.Name);
            }
            bublesort.BubleSortMethord(persongs);

            Console.WriteLine("\n排序后:\n");
            foreach (var item in persongs)
            {
                Console.WriteLine(item.Name);
            }
        }
    }
}

 

总结:1、类是对对象的抽象,可以把抽象类理解为把类当作对象,抽象成的类叫做抽象类。而接口只是一个行为规范或规定。抽象类更多的是定义在一系列紧密相关的类间,而接口大多数是关系疏松但都实现某一功能的类中。2、接口基本上不具备继承的任何具体特点,它仅继承了能够调用的方法。3、一个类一次可以实现若干个接口,但是只能扩展一个父类。4、接口可以用于支持回调,而继承并不具备这个特点。5、抽象类不能被密封。6、抽象类中的方法默认为虚的,但是实现接口的类中的接口方法却默认是非虚的,当然也可以声明为虚的。7、抽象类实现了面向对象的一个原则,把可变的和不可变的分离。抽象类和接口就是定义不可变的,而把可变的让子类去实现。8、好的接口应该是专一功能的,而不是多功能的,否则造成接口污染。9、如果抽象类实现接口,则可以把接口中的方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中的方法。

关于接口和抽象类的形象比喻:

1、飞机会飞,鸟会飞,他们都继承了同一个接口”飞“,但是F22属于飞机抽象类,鸽子属于鸟抽象类。

2、铁门和木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或者木门(多态),而且只能是门,你不能说它是窗(单继承),一个门可以有锁(接口)也可以有门铃(多实现)。门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也发出声音吧(接口污染))。

posted @ 2008-09-03 11:05  IT-CEO  阅读(1405)  评论(0编辑  收藏  举报