您的位置:首页 > 其它

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

2008-09-03 11:05 309 查看
四、用库中的接口实现

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

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

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、铁门和木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或者木门(多态),而且只能是门,你不能说它是窗(单继承),一个门可以有锁(接口)也可以有门铃(多实现)。门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也发出声音吧(接口污染))。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: