抽象类与接口--由一个调用接口方法的小实例所想到的
2013-10-20 22:19
435 查看
今天看一园友的文章,实现在一个类中调用另一个类中所实现的接口方法,感觉方法不错,先整理代码如下:
第一种方法用泛型类,但为类型参数T加上约束,必须实现接口,当实例化该泛型类时,调用构造器就会去调用实现了接口方法的类型对象的方法;第二种方法更简洁:类中定义有参构造器,必须传入实现了接口方法的实例,并调用该实例的方法--
由这个小示例想到接口与抽象类的区别,整理如下:
1.接口定义了一组约束,这组约束中的方法不能有具体实现,实现该接口的类必须显示实现接口方法;而抽象类中定义的方法可以有具体实现,子类可以重写父类的方法,也可以继承(默认)
2.抽象类与子类是单继承的,而接口是可以多继承的----一个类只可能继承自一个抽象类,但却可以实现多个接口。
3.抽象类与子类之间是"是" 的关系,而接口是说"行为要按接口来完成"。例如:定义鸟的抽象类,鸽子、麻雀、鹦鹉都继承自该抽象类,它们都是鸟,都默认实现了"鸟"中定义的方法;定义了飞这个接口,飞机,麻雀,气球都能飞,但具体实现方法不一样
4.抽象类的灵活之处在于,有了新的方法直接定义在父类中,子类自动继承,不必逐个定义,而接口呢,添加新的规范的话,实现了该接口的类都要去显示定义该方法
5.接口既可以作用于值类型也可以作用于引用类型,但抽象类只能作用于引用类型(类,当然是引用类型)
深究起来应该还有很多吧,但常用的估计就这些了
算作对学习的一个小总结吧
//定义一个接口 public interface IOperateData { void ShowData(); } //类A实现接口 public class ClassA:IOperateData { public void ShowData() { Console.WriteLine("this is A method!"); } } //方法1.泛型类B中调用类A的接口方法 public class ClassB<T> where T:IOperateData { public ClassB(T t) { t.ShowData(); } } //调用如下 ClassA a=new ClassA(); ClassB<ClassA> b=new ClassB<ClassA>(a); //方法2. public class ClassC { public ClassC(IOperateData o) { o.ShowData(); } } //调用如下 ClassA a=new ClassA(); ClassC c=new ClassC(a);
第一种方法用泛型类,但为类型参数T加上约束,必须实现接口,当实例化该泛型类时,调用构造器就会去调用实现了接口方法的类型对象的方法;第二种方法更简洁:类中定义有参构造器,必须传入实现了接口方法的实例,并调用该实例的方法--
由这个小示例想到接口与抽象类的区别,整理如下:
1.接口定义了一组约束,这组约束中的方法不能有具体实现,实现该接口的类必须显示实现接口方法;而抽象类中定义的方法可以有具体实现,子类可以重写父类的方法,也可以继承(默认)
2.抽象类与子类是单继承的,而接口是可以多继承的----一个类只可能继承自一个抽象类,但却可以实现多个接口。
3.抽象类与子类之间是"是" 的关系,而接口是说"行为要按接口来完成"。例如:定义鸟的抽象类,鸽子、麻雀、鹦鹉都继承自该抽象类,它们都是鸟,都默认实现了"鸟"中定义的方法;定义了飞这个接口,飞机,麻雀,气球都能飞,但具体实现方法不一样
4.抽象类的灵活之处在于,有了新的方法直接定义在父类中,子类自动继承,不必逐个定义,而接口呢,添加新的规范的话,实现了该接口的类都要去显示定义该方法
5.接口既可以作用于值类型也可以作用于引用类型,但抽象类只能作用于引用类型(类,当然是引用类型)
深究起来应该还有很多吧,但常用的估计就这些了
算作对学习的一个小总结吧
相关文章推荐
- Resolving Issues Where Application Queries are Waiting Too Frequently for 'db file sequential read'
- php设计模式之工厂模式
- 程序员面试之道(《程序员面试笔试宝典》)之求职有用网站及QQ群一览表
- rails 4.0 中 i18n 进行 model 中文化
- find command in UNIX
- 实时数据库设计特点
- Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?
- 系统管理者利剑――Sysinternals Suite
- android SDK安装Failed to fetch URL http://dl-ssl.google.com/android/repository/addons_list-1.xml出错
- ogre max 导出mesh文件遇到的问题
- 960 grid 分析
- Java问题排查常用linux命令
- Android开发人员有福了---wifi连接调试
- Hbase 三维有序存储
- timus1982. Electrification Plan---最小生成树
- Python中的random模块
- 如何学习Unity3D
- 如何写好Android代码?
- instanceof详细用法
- Java SE——static与final关键字