关闭

接口(九)用接口和抽象类,与不用究竟究竟有什么区别或好处?

标签: inheritanceclassstringc#oracle扩展
723人阅读 评论(0) 收藏 举报
分类:
接口和抽象类关系很紧密,它们都具有对成员的抽象。  
          对于一个抽象类,至少一个方法是抽象方法既可,这意味着它也可以具有具体方法[译注:Concrete   Method,这只是相对于抽象方法而言,面向对象中并没有这个概念]。  
          对于一个接口,所有的方法必须都是抽象的。  
          实现了一个接口的类必须为接口中的所有方法提供具体的实现,否则只能声明为抽象类。  
          在C#中,多重继承(Multiple   Inheritance)只能通过实现多个接口得到。抽象类只能单继承[注:C#中的单继承是指所有类作为基类的时候都只能是派生类声明中唯一的基类,而不仅仅是抽象类]。  
          接口定义的是一个契约,其中只能包含四种实体,即方法、属性、事件和索引器。因此接口不能包含常数(Constant)、域、操作符、构造器、析构器、静态构造器或类型[译注:指嵌套的类型]。  
          同时,一个接口还不能包含任何类型的静态成员。修饰符abstract、public、protected、internal、private、virtual、override都是不允许出现的,因为它们在这种环境中是没有意义的。  
          类中实现的接口成员必须具有公有的可访问性。
 
举个最简单例子吧.假如有个构建SQL语句的类.它有一个方法获得任意字符通配符.为此,我们写个抽象类:  
  public   abstract   class   DbFactoryBase  
  {  
          //默认实现,通配符  
          public   virtual   string   GetMultiLikeChar()  
          {  
                  return   "%";  
          }  
  }  
  //我们写MSSQL的实现  
  public   class   SqlSvrFactory:DbFactoryBase  
  {  
          //GetMultiLikeChar方法不需要重载  
  }  
  //我们写Jet的实现  
  public   class   JetFactory:DbFactoryBase  
  {  
          //重载,通配符  
          public   override   string   GetMultiLikeChar()  
          {  
                  return   "*";  
          }  
  }  
  好处是显而易见的,抽象类提供了默认实现,子类只在需要更改的时候才重载这个方法,我们这个类可以很容易扩展,比如增加对ORACLE的实现,调用这个抽象类的代码也不需要改变,但返回来的字符已经不同了.代码看上去也更简洁...等等.这只是冰山之一角.建议多看看模式之类的书.
0
0
查看评论

“==”和equals()方法到底有什么区别

两个对象是否相等的含义 “==”和equals()都属于对象的关系运算中的比较相等。那么判断一个类的两个对象是否相等有什么含义呢?有两层含义: ①判断它们是否引用同一个实例; ②当两个对象分别引用同一个实例时,判断它们的实例值是否相等。一般情况下,两个实例值相等,是指它们的各成员变量值分别对应相...
  • Jane_Liee
  • Jane_Liee
  • 2016-11-29 13:03
  • 941

equals方法与==到底有什么区别

equals ()是Object类提供的一个实例方法也就是说每个类都含有这个方法
  • wangdianyong
  • wangdianyong
  • 2014-05-19 12:35
  • 796

抽象类(abstract class)和接口(Interface)的区别

前言 抽象类(abstract class)和接口(Interface)是Java语言中对于抽象类定义进行支持的两种机制,赋予了Java强大的面向对象能力。二者具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于abstractclass和Interface的选择显得比较随意。...
  • aptentity
  • aptentity
  • 2017-04-01 11:53
  • 1486

"=="和equals()方法究竟有什么区别?

"=="和equals方法究竟有什么区别? (单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引...
  • young_YangY
  • young_YangY
  • 2017-07-23 12:52
  • 172

JAVA中接口和抽象类的区别?

原文:http://blog.csdn.net/sunboard/article/details/3831823 1.概述 一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑...
  • u010355144
  • u010355144
  • 2015-04-08 18:04
  • 563

java中抽象类和接口之间的区别和关系

首先抽象类归根结底还是属于类,对于抽象方法,是只能存在于抽象类中的,我们无法再一个非抽象的类中声明一个抽象方法,其次抽象方法只需要声明,并不需要事先。当我们要写一个抽象类的时候只需要在类的前面声明为abstract即可了。同时抽象类是无法被实例化的,而抽象类的存在就是为了被继承的,在我们定义类的时候...
  • ysayk
  • ysayk
  • 2016-06-12 23:08
  • 1213

抽象类(abstract class)与接口(interface)的异同

抽象类:包含抽象方法的类就是抽象类 接口:指抽象方法的集合,方法不包含方法体相同点: 都不能被实例化 接口的实现类或者抽象类的子类都必须实现了接口或抽象类中的方法后才可以被实例化 不同点: 接口只有定义,方法不能在接口中实现,实现接口的类要实现接口中所有的方法;抽象类可以有定义与实现,方法可以在抽...
  • aym_fuhong
  • aym_fuhong
  • 2016-09-05 20:07
  • 1843

C#的抽象类和接口的区别,在什么时候使用才合适?

原文地址:http://www.cnblogs.com/seapub/archive/2012/08/08/2628433.html 理解抽象类   abstract class和interface在c#语言中都是用来进行抽象类(本文 中的抽象类并非从abstract ...
  • KingSea168
  • KingSea168
  • 2016-07-09 15:13
  • 1080

简单介绍java抽象类和接口的区别

抽象类:在面向语言的概念中,所有的对象都是通过类来描绘的,但是反过来却不是这样,如果一个类中没有足够的信息去描绘一个具体的对象,那么这个类就是抽象类。 接口:不同类的对象对同一行为产生不同的行为结果,换言之既是一系列方法的声明,一些方法特征的集合,具体的实现由子类去完成。 其二者区别: ...
  • u012402177
  • u012402177
  • 2016-02-24 10:18
  • 617

"=="和equals方法究竟有什么区别? —— Java经典面试题系列

每日一道面试题,开开心心过大公司笔面试。 面试官:"=="和equals方法究竟有什么区别? 我:(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中...
  • yzw19932010
  • yzw19932010
  • 2013-09-29 16:38
  • 2038
    个人资料
    • 访问:515793次
    • 积分:8018
    • 等级:
    • 排名:第3093名
    • 原创:184篇
    • 转载:51篇
    • 译文:10篇
    • 评论:157条
    实时微博
    最新评论