精华内容
下载资源
问答
  • 什么时候用接口?什么时候用抽象类? 如果这个概念在我们脑子中是确确实实存在的,就用抽象类。 否则的话,如果这个概念仅仅是一方面的特性,比如会飞的,能跑的,这些我们就设置为接口。 两个概念模糊,不知道...

    什么时候用接口?什么时候用抽象类?

    如果这个概念在我们脑子中是确确实实存在的,就用抽象类。

    否则的话,如果这个概念仅仅是一方面的特性,比如会飞的,能跑的,这些我们就设置为接口。

    两个概念模糊,不知道设置为抽象类还是接口的时候,一般我们设置为接口,原因是我们实现了这个接口还可以继承。

     

    转载于:https://www.cnblogs.com/hengzhezou/p/11204441.html

    展开全文
  • 什么时候用抽象类,什么时候用接口“接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真分析,还是有不少的:...

    什么时候用抽象类,什么时候用接口

    “接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真分析,还是有不少的:在JAVA中,类只能是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的;接口就不一样了,它不但可以用一个类或结构实现多个接口,一个接口还可以有多个实现。”

           抽象类是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能,它可以提供已实现的成员,因此,可以用抽象类确保特定数量的相同功能,但不能用接口这样做。
    “也就是说,它们在提供多态性的问题上是有差别的?”我好象听懂了点什么。
    “如果预计要创建组件的多个版本,我们应该创建抽象类。这是因为,抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。这是好处,当然也是问题.另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。所以,如果创建的功能将在大范围的全异对象间使用,则使用接口。”------:“能不能这样说,抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。”
    我上午跟你说,要创建控件,首先就是要对一些接口进行实现以让系统能够识别(详见前文《接口》)。而各个控件之间的联系其实关联性并不大。所以,它们的基础大都是接口。但是,我们要注意一点,在组件设计时,如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。这是因为我们刚才说过的原因,抽象类允许部分实现类,而接口不包含任何成员的实现。”

    “唔,明白了,它们之间的区别有点明白了。”我默默地点了点头。

           “另外,有个通用的设计思想,如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。”
    “看来设计的问题还是蛮大的,一般来说,怎么设计接口呢?”我接着问。

    “为什么你所看到的编程书籍也好,程序例程也好,极少有对接口的描述,而对类实现继承的例子比比皆是?这就从一个侧面给我们提了一个醒,如果使用适当,接口可以成为很有用的工具。但如果使用不当,它们会变得非常棘手,甚至妨碍有效的编程。接口的设计与使用其实是一项高明的艺术。”

    ,“通过接口与实现的方式,我们可以将同一类型的程序运用在不同的对象上面,而且不必修改原有类,相对子程序必须通过修改源程序代码才能够达到重用的目的,接口与实现不仅是伟大的进步,也是境界极高的程序设计艺术。”   

    “但是,最大的问题还是集中在接口设计上。接口一旦被定义和接受,就必须保持不变,以保护为使用该接口而编写的应用程序。接口发布后,就不能对其进行更改。这是我们进行组件设计的一个重要原则,叫做‘接口不变性’。”

    “我已经反反复复强调过,创建一个接口就是在创建一个定义,接口定义发布后则永远不能更改。接口不变性,就是为了保护为使用接口而编写的现有系统。当接口设计与需求有所出入,确认需要大幅度变更时,我们应该创建新的接口。一般命名方式是,新接口可以通过在原来的接口名称后追加一个数字‘2’来命名,以显示出它与现有接口的关系。然后通过接口继承来创建新接口。”

      “可是,如果需求分析得不好,岂不是会出现一大堆的派生接口了?”我不免有点顾虑。

    “这是肯定的,而且过于频繁地生成新接口,会因未使用的接口实现而使组件变得很庞大。有经验的设计师,在充分分析需求后,设计出的接口往往很小且相互独立,减少了性能问题发生的可能。”

    “这种分解能力倒真的是艺术呀!”我不禁为之叹服。

    “当然,一般来说,我们会把确定哪些属性和方法属于接口的设计过程称为‘接口分解’。基本准则是,应在一个接口中将紧密相关的几个功能聚合为一组。功能太多会使接口不便于运行,而过于细分功能将导致额外的系统开销并降低使用的简易性。掌握分解的这个度的能力是需要不断的在技术上进行磨炼,以及在对每个项目深入分析与理解的基础上才能得到的。”

    接口与类实现继承相比,好处有什么?”:“我试着说一下吧,总体而言,接口是一种非常有效的编程方法,它让对象的定义与实现分离,从而可以在不破坏现有应用程序的情况下使对象得以完善与进化。接口消除了实现继承的一个大问题,就是在对设计实施后再对其进行更改时很可能对代码产生破坏。即使实现继承允许类从基类继承实现,在类首次发布时仍然会使我们不得不为设计做很多的抉择。如果原有的设想不正确,并非总可以在以后的版本中对代码进行安全的更改。比如,我们定义了一个基类的方法,它需要一个 Integer 参数,而后来又确定该参数应该为 Long 数据类型。我们无法安全更改原始类,因为为从原始类派生的类所设计的应用程序可能无法进行正确编译。这一问题会扩大化,因为单个基类会影响几百个子类。”

    “那用重载原始类并采用一个Long类型的参数,不就能解决这个问题了吗?”大李提了个问题。

    “这个么?”我想了一下,“可是,这样不一定能达到满意的效果,因为一个派生类可能需要对采用整数的方法进行重写,如果取 Long 数据类型的方法不能被重写,该派生类可能无法正常运行。”

    “那用接口怎么做?”大李不依不挠地继续问。

    “办法就是发布接受新数据类型的更新接口。”我一下子就回答出来了。

    “看来你已经掌握了接口操作的基本环节了。”大李的评语真让我高兴。“我再帮你总结一下,使用接口继承而不用类继承的主要原因有:在应用程序要求很多可能不相关的对象类型以提供某种功能的情况下,用接口适用性会更强;接口比基类更灵活,因为可以定义单个实现来实现多个接口;在无需从基类继承实现的情况下,接口更好;在无法使用类继承的情况下接口是很有用的。例如,结构无法从类继承,但它们可以实现接口。”

    展开全文
  • 什么时候用接口?什么时候用抽象类?

    千次阅读 2015-04-29 12:38:13
    什么时候用接口?什么时候用抽象类? 接口相对于抽象类和实体类的好处. 实现多继承. 对于一种需求,发电机,然后分别有光能和风能发电机,最后又出来风能光能混合发电机. 如果使用抽象类,则因为JAVA不支持多...

    什么时候用接口?什么时候用抽象类?

    接口相对于抽象类和实体类的好处.

    实现多继承.

    对于一种需求,发电机,然后分别有光能和风能发电机,最后又出来风能光能混合发电机.

    如果使用抽象类,则因为JAVA不支持多继承而使,(风能光能混合发电机 instance 风能发电机)失效.而如果使用接口则没有此问题.

     

     

    抽象类相对于接口的好处

    抽象类中可以包含一些实现,即一些非abstract方法,而接口中所有的方法都是抽象的.所以抽象类可以将子类中共同的逻辑向上提,在抽象类中实现,在一定程度上实现代码的复用.

     

    抽象类和接口相对于实体类的好处.

    通过方法的覆盖来实现多态,也就是运行期绑定.

     

    总结

    接口是用来定义行为的,抽象类是用来实现行为的,实体类是用来执行行为的.

     

    多重继承

    支持抽象函数

    支持具体实现

    允许创建实体

    Interface

    Y

    Y

    N

    N

    Abstract class

    N

    Y

    Y

    N

    class

    N

    N

    Y

    Y

     

     

    展开全文
  • 什么时候用抽象类,什么时候用接口“接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真分析,还是有不少的:...
    什么时候用抽象类,什么时候用接口 

    “接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真分析,还是有不少的:在JAVA中,类只能是从一个基类继承,所以如果要使用抽象类为一组类提供多态性,这些类必须都是从那个类继承的;接口就不一样了,它不但可以用一个类或结构实现多个接口,一个接口还可以有多个实现。” 
           抽象类是一种不能实例化而必须从中继承的类。抽象类可以完全实现,但更常见的是部分实现或者根本不实现,从而封装继承类的通用功能,它可以提供已实现的成员,因此,可以用抽象类确保特定数量的相同功能,但不能用接口这样做。 
    “也就是说,它们在提供多态性的问题上是有差别的?”我好象听懂了点什么。 
    “如果预计要创建组件的多个版本,我们应该创建抽象类。这是因为,抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。这是好处,当然也是问题.另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。所以,如果创建的功能将在大范围的全异对象间使用,则使用接口。”------:“能不能这样说,抽象类主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。” 
    我上午跟你说,要创建控件,首先就是要对一些接口进行实现以让系统能够识别(详见前文《接口》)。而各个控件之间的联系其实关联性并不大。所以,它们的基础大都是接口。但是,我们要注意一点,在组件设计时,如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。这是因为我们刚才说过的原因,抽象类允许部分实现类,而接口不包含任何成员的实现。” 

    “唔,明白了,它们之间的区别有点明白了。”我默默地点了点头。 
           “另外,有个通用的设计思想,如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。” 
    “看来设计的问题还是蛮大的,一般来说,怎么设计接口呢?”我接着问。 

    “为什么你所看到的编程书籍也好,程序例程也好,极少有对接口的描述,而对类实现继承的例子比比皆是?这就从一个侧面给我们提了一个醒,如果使用适当,接口可以成为很有用的工具。但如果使用不当,它们会变得非常棘手,甚至妨碍有效的编程。接口的设计与使用其实是一项高明的艺术。” 

    ,“通过接口与实现的方式,我们可以将同一类型的程序运用在不同的对象上面,而且不必修改原有类,相对子程序必须通过修改源程序代码才能够达到重用的目的,接口与实现不仅是伟大的进步,也是境界极高的程序设计艺术。”   

    “但是,最大的问题还是集中在接口设计上。接口一旦被定义和接受,就必须保持不变,以保护为使用该接口而编写的应用程序。接口发布后,就不能对其进行更改。这是我们进行组件设计的一个重要原则,叫做‘接口不变性’。”

    “我已经反反复复强调过,创建一个接口就是在创建一个定义,接口定义发布后则永远不能更改。接口不变性,就是为了保护为使用接口而编写的现有系统。当接口设计与需求有所出入,确认需要大幅度变更时,我们应该创建新的接口。一般命名方式是,新接口可以通过在原来的接口名称后追加一个数字‘2’来命名,以显示出它与现有接口的关系。然后通过接口继承来创建新接口。” 

      “可是,如果需求分析得不好,岂不是会出现一大堆的派生接口了?”我不免有点顾虑。 

    “这是肯定的,而且过于频繁地生成新接口,会因未使用的接口实现而使组件变得很庞大。有经验的设计师,在充分分析需求后,设计出的接口往往很小且相互独立,减少了性能问题发生的可能。” 

    “这种分解能力倒真的是艺术呀!”我不禁为之叹服。 

    “当然,一般来说,我们会把确定哪些属性和方法属于接口的设计过程称为‘接口分解’。基本准则是,应在一个接口中将紧密相关的几个功能聚合为一组。功能太多会使接口不便于运行,而过于细分功能将导致额外的系统开销并降低使用的简易性。掌握分解的这个度的能力是需要不断的在技术上进行磨炼,以及在对每个项目深入分析与理解的基础上才能得到的。” 

    接口与类实现继承相比,好处有什么?”:“我试着说一下吧,总体而言,接口是一种非常有效的编程方法,它让对象的定义与实现分离,从而可以在不破坏现有应用程序的情况下使对象得以完善与进化。接口消除了实现继承的一个大问题,就是在对设计实施后再对其进行更改时很可能对代码产生破坏。即使实现继承允许类从基类继承实现,在类首次发布时仍然会使我们不得不为设计做很多的抉择。如果原有的设想不正确,并非总可以在以后的版本中对代码进行安全的更改。比如,我们定义了一个基类的方法,它需要一个 Integer 参数,而后来又确定该参数应该为 Long 数据类型。我们无法安全更改原始类,因为为从原始类派生的类所设计的应用程序可能无法进行正确编译。这一问题会扩大化,因为单个基类会影响几百个子类。” 

    “那用重载原始类并采用一个Long类型的参数,不就能解决这个问题了吗?”大李提了个问题。 

    “这个么?”我想了一下,“可是,这样不一定能达到满意的效果,因为一个派生类可能需要对采用整数的方法进行重写,如果取 Long 数据类型的方法不能被重写,该派生类可能无法正常运行。” 

    “那用接口怎么做?”大李不依不挠地继续问。 

    “办法就是发布接受新数据类型的更新接口。”我一下子就回答出来了。 

    “看来你已经掌握了接口操作的基本环节了。”大李的评语真让我高兴。“我再帮你总结一下,使用接口继承而不用类继承的主要原因有:在应用程序要求很多可能不相关的对象类型以提供某种功能的情况下,用接口适用性会更强;接口比基类更灵活,因为可以定义单个实现来实现多个接口;在无需从基类继承实现的情况下,接口更好;在无法使用类继承的情况下接口是很有用的。例如,结构无法从类继承,但它们可以实现接口。”
    展开全文
  • java什么时候用抽象类,什么时候用接口

    千次阅读 多人点赞 2012-08-03 00:04:14
    关于什么时候用抽象类,什么时候用接口,我在这里做一下总结。 首先看下面的例子: abstract class AbstractStudent{ abstract void study(); void sleep(){ System.out.println("sleep"); } void smoke...
  • 什么时候用抽象类,什么时候用接口

    千次阅读 2011-03-09 10:08:00
    什么时候用抽象类,什么时候用接口 <br />“接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真...
  • 什么时候用抽象类,什么时候用接口 “接口是完全抽象的成员集合,它的成员都无法在接口定义时实现,我们可以将它看作是为操作定义合同,接口的实现完全留给开发者去做。它们之间的区别,如果认真分析,还是有不少...
  • 什么时候使用抽象类和接口? 抽象类 :本类固有的属性和行为(共享抽象类核心属性和行为时) 接口: 扩展功能的时候 (当类共享外围行为时,就会使用接口) 举个例子 飞行员是抽象类 f16飞行员 具体类 安全员 ...
  • 如果行为跨越不同类的对象,可使用接口,如果对现实类对象、可以抽象类。 抽象类是从子类中发现了公共的东西,泛化出父类,然后子类继承父类。 接口是根本不知道子类的存在,方法如何实现还不确认,只是预先定义...
  • 一.java接口 1.接口的定义为的关键字为interface 2.接口中只能有方法和变量,变量为public static final类型,方法只能被可以为public(默认)和...1.抽象类必须 abstract修饰 2.如果一个类有abstract方法,这个类一...
  • 对于抽象类以及接口的概念,大家都容易把这两者搞混,其实我也一样,在听李建忠老师的设计模式时,他也老把抽象类说成接口...分析对象,提炼内部共性形成抽象类,以表示对象本质,即“是什么” 为外部提供调用或功能
  • 继承的时候用抽象类。 接口的设计包括所有设计。其它设计全用接口做设计。 经验四:如果无法判断怎样设计。有一个通用的写法。 第一步:接口、定义的都是抽象方法 第二步:抽象类、部分实现接口。 第三步:...
  • 如果是考虑一类事物或者一种事物的特征,比如会飞的会跑的 一般定义成接口 如果考虑的是一个事物,但是没有一个具体概念,比如交通工具定义为抽象类...
  • c#什么时候用接口 什么时候用抽象类 考虑这样一个例子,假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,此时我们可以通过abstract class或者interface来定义一个表示该抽象...
  • 什么时候用 如果在你的程序中有下面的这些情况,那你就要考虑使用抽象类了: 你想要在几个关联紧密的类之间共享代码。 你想要继承抽象类的那些类有一些公共方法或属性抑或是有修改protected或private属性的权限...
  • 一.java接口 1.接口的定义为的关键字为interface 2.接口中只能有方法和变量,变量为public static final类型,方法只能被可以为public(默认)和protected修饰,...1.抽象类必须 abstract修饰 2.如果一个类有abstra
  • 请问大佬aaaaaaaaa
  • 如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。 对象接口: 使用接口(interface)...
  • 把编程映射会日常生活进行对照,那么一个东西,抽象类表示它是什么接口表示它能做什么。举一个栗子,一个Person,他有眼睛、肤色,这些描述一个人的特征可以定义在抽象类中,而一个人的行为如打篮球,所以这些可以...
  • 如果需要接口的新版本,必须创建一个全新的接口。   如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。   如果要设计小而...
  • 什么时候用抽象类什么时候用接口 .

    千次阅读 2012-04-09 11:03:19
    如果需要接口的新版本,必须创建一个全新的接口。   如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。   如果要设计小而...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,874
精华内容 1,949
关键字:

什么时候用接口