zoukankan      html  css  js  c++  java
  • 抽象类和接口精华

    抽象类相关

    抽象类:又叫抽象基类:在定义的时候使用 abstract 关键字标记的普通类。他可包含一般类所包含的所具有的特性,例如字段,属性,方法,另外还包含一个很特殊的方法,叫抽象方法(没有实现的方法,而派生于该类的类就必须实现该方法),而且不能被实例化,主要用在类的定义和部分实现等方面。

    接下来我们先看下抽象类和抽象方法在使用需要注意的地方:

    1,抽象类需要用abstract关键字标记

    2,抽象方法不能有任何的方法实现(连{}都不能有)

    3,抽象成员必须包含在(隶属于)抽象类中。

    4,由于抽象成员没有任何实现,所以子类必须将抽象成员重写。

    5.抽象类不能实例化,所以抽象类的存在就是为了让子类继承。

    6,抽象类中既可以包括抽象成员,也可以包括具有代码实现的成员。,

    7,抽象方法不能用static修饰。

    看过了抽象类和抽象方法后,我们接着来看下与接口相关的内容

    接口相关:

    接口:接口是一种特殊的抽象类,用interface关键字来标记接口类型,它可以包含实例/静态方法,任何实现该接口的类就必须按照接口的定义实现这些方法。

    下面我们来看下使用接口要注意哪些地方:

    1,         接口是一种规范,为了实现多态而存在

    2,         接口不能被实例化

    3,         接口中的成员不能加“访问修饰符”,接口中的成员访问修饰符为public,不能修改(默认为public)

    4,         接口中的成员不能有任何实现(“光说不做”,只是定义了一组未实现的成员)

    5,         接口中只能有方法、属性、所引器和事件,不能有“字段”

    6,         接口与接口之间可以继承,并且可以多继承

    7,         实现接口的子类必须实现该接口的全部成员。

    8,         一个类可以同时继承一个类并实现多个接口,如果一个类同时继承了父类A,并且实现了接口IA,那么语法上A必须写在IA的前面。Class  Test:A,IA{},因为类是单继承的。

    9,         当一个抽象类实现接口的时候,如果不想把接口中的成员实现,可以把该成员实现为abstract

    10,      显示实现接口,只能通过接口变量来调用(因为显示实现接口后成员为private)

    看过了抽象类和接口各自的特点后,下面我们就来看下抽象类和接口的区别:

    第一:接口定义类的公共行为,抽象类定义类的公共实现

    第二:一个类只能继承自一个类(抽象类),但是可以同时实现多个接口

    第三:接口中不能有实现,抽象类中既可以有未实现的成员,也可以有实现的成员

    第四:接口中未实现的方法必须在子类中实现,抽象类中未实现的成员必须在子类中重写

    第五:好的接口定义应该是具有专一功能性的,而不是多功能的,否则会造成接口污染。如果一个类只是实现了这个接口中的一个功能,而不得不去实现接口中的其他方法,就叫接口污染。

    看过了抽象类和接口的区别后,我们接着来看下抽象类和接口的应用场合。

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

      首先我们强调下:抽象类主要用于关系密切的对象;而且接口适合为不相关的类提供通用功能。

    例如:飞机会飞,鸟也会飞,他们都继承了同一个接口”飞”;但是“波音747”属于飞机抽象类,大雁属于鸟抽象类。

    或者是如下比喻:

    就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。 门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。

    最后用一张简单的表格对两者进行一个对比:

    转载微冷的雨出品---YYM
  • 相关阅读:
    NetBeans 时事通讯(刊号 # 95 Mar 19, 2010)
    现在才知道TR1的错误在VC9的SP1中解决
    TinyXml快速入门(三)
    Install python 2.6 in CentOS Stack Overflow
    rpm forge install on centos 5
    Linux tee ysdaniel的专栏 博客频道 CSDN.NET
    python26 gramma
    一个简单的基于编辑距离的英文单词查错(Python) Muilpin.Miao的日志 网易博客
    磁盘目录占用空间计算排序工具 ncdu
    PyCon China 2012
  • 原文地址:https://www.cnblogs.com/WuXuanKun/p/5498481.html
Copyright © 2011-2022 走看看