一、抽象类
c#允许把类和方法声明为abstract,即抽象类和抽象方法。抽象类不能实例化,抽象方法必须被子类重写,如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其他一般方法。
抽象类拥有尽可能多的共同代码,尽可能少的数据。
abstract class Animal //加abstract关键字,表明是抽象类 { …… protected abstract string getShoutSound(); //在方法返回值前加abstract表明此方法是抽象方法。 …… //抽象方法没有方法实体,直接在括号后加分号 }
二、接口
接口是把隐式公共方法和属性组合起来,以封装特定功能的一个集合,一旦类实现了接口,类就可以支持接口所指定的所有属性和成员;接口的命名前面加一个大写字母“I”。
声明接口在语法上与声明抽象类完全相同,但不允许提供接口中任何成员的执行方式;实现接口的类必须要实现接口中的所有方法和属性。
接口不能实例化,不能有构造方法和字段,不能有修饰符,不能声明虚拟或静态。
interface IChange //声明一个接口,此接口有一个方法 { string ChangeTing(string thing); //参数是一个字符串变量,返回一个字符串 }class MachineCat:Cat,IChange //可以继承父类,也可以同时继承接口 { public MachineCat(): base() //继承自父类的构造函数 { } public string ChangeThing(string thing) //实现接口的方法,不能加override修饰符 { return base.Shout() + " 我有万能的口袋,我可变出" + thing; //调用父类Cat的方法 } }private void button6_Click(object sender, EventArgs e) //窗口调用{ MachineCat mcat = new MachineCat("叮噹"); //实例化叮当猫类 IChange array = new IChange(mcat); //将类实例赋值给接口 MessageBox.Show(array.ChangeThing("各种各样的东西!")); //实现接口方法 }
三、抽象类和接口的异同
抽象类
接口可以给出一些成员的实现,即可以包含一般方法 不能包含成员的实现,必须由实现类实现 抽象成员可被子类部分实现 接口成员需要实现类完全实现 一个类只能继承一个抽象类 一个类可以实现多个接口 对类的抽象 对行为的抽象 设计角度:从子类中发现了公共的东西,泛化出父类,然后子类继承父类 设计角度:根本不知子类的存在,方法如何实现还不确认,预先定义 适用:对于一些相似的类对象,用继承抽象类 适用:如果行为跨越不同类的对象,可使用接口
时间: 2024-10-05 02:17:54