抽象类与接口

Fighting.jpg

抽象方法和抽象类特点

抽象方法和抽象类必须使用abstract修饰符来定义,有抽象方法的类只能被定义为抽象类,抽象类中可以没有抽象方法。

  • 抽象类必须使用abstract修饰符来修饰,抽象方法也必须使用abstract修饰符来修饰,抽象方法不能有方法体。

  • 抽象类不能被实例化

  • 抽象类可以包含成员变量、方法、构造器、初始化代码块、内部类,因为不能被实例化,所有这些都是被子类调用

  • 含抽象方法的类,只能被定义为抽象类

  • 抽象方法必须为public或者protected(如果为private,则不能被子类继承,子类无法实现该方法就没有其价值),缺省的情况下默认为public

  • abstract 不能修饰成员变量,不能用于修饰局部变量,即没有抽象变量、抽象成员变量说法;也不能修饰构造器、没有抽象构造器,抽象类中的构造器只能时普通的构造器

  • 使用abstract修饰类时,即表明这个类只能被继承。当使用abstract修饰方法时,表明这个方法必须由子类提供实现。而final修饰的类不能被继承,final修饰的方法不能被重写。因此final和abstract是不能够同时使用的。

  • static修饰一个方法时,表明这个方法属于该类本身,即通过类就可调用该方法,但该方法被定义为抽象方法,即通过该类不能调用没有方法体的方法。 但是static和abstract可以修饰内部类

抽象类的作用

  • 抽象父类可以只定义需要使用的某些方法,把不能实现的部分抽象成抽象方法,留给其子类实现
  • 父类总可能包含需要调用其他系列方法的方法,这些被调方法既可以有父类实现,也可以由子类实现。

接口

接口定义基本语法

[修饰符] interface 接口名 extends 父接口1,父接口2
{
    零个到多个常量定义...     静态常量 
    零个到多个抽象方法定义...  
    零个到多个内部类、接口、枚举     默认采用了public static
    零个到多个默认方法或类方法定义
}

==Java 8接口==

  • 允许在接口中定义默认方法,但是必须使用default修饰,但不能使用static修饰, 总是使用public修饰的
  • 允许在接口中定义类方法,但必须使用static修饰,不能使用default修饰
  • 接口类的成员变量默认是使用public static final 修饰的

接口和抽象类的异同点

==相同点==

  • 接口和抽象类都不能被实例化,位于继承树的顶端,用于被其他类实现和继承
  • 接口和抽象类都可以包含抽象方法,实现接口或继承抽象类的普通子类都必须实现这些抽象方法

==差别==

  • 设计目的上
    • 接口作为系统与外界交互的窗口,接口体现的是一种规范,对于接口的实现者而言,接口规定了实现者必须向外提供哪些服务(以方法的形式来提供);对于接口的调用者来说,接口规定了调用者可以调用哪些服务,以及如何调用这些服务; 接口类制定了系统各模块应该遵循的标准,接口不应该经常被改变。一旦被改变,对整个系统都会有影响
    • 抽象类作为系统中多个子类的共同父类,体现的是一种模板式设计。
  • 一个类最多只能有一个直接父类,包括抽象类;但是可以直接实现多个接口
  • 接口里面只能定义静态常量,不能定义普通成员变量;抽象类中既能蒂尼静态常量又能定义普通成员变量
  • 接口里面不能有初始化代码块;但是抽象类完全可以包含初始化块
  • 接口里面只能包含抽象方法、静态方法、默认方法,不能为普通方法提供方法实现;抽象类则完全可以包含普通方法
  • 接口里不包含构造器;抽象类可以包含构造器,抽象类里的构造器并不是用于创建对象,而是让其子类调用这些构造器来完成抽象类完成属于抽象类的初始化操作

后记

参考《疯狂Java讲义》

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容

  • 你很清楚的知道什么时候用抽象类,什么时候用接口么?p.s. 多文字预警! 1 抽象类和接口简介 1.1 抽象类 ...
    Sharember阅读 2,349评论 9 55
  • 一、抽象类 1、抽象类含义的概括: 当多个类出现相同功能时,但功能主体不同,这样可以向上抽取,抽取时只抽取功能定义...
    玉圣阅读 828评论 0 6
  • 3.1 抽象类 抽象类是从多个类中抽象出来的模板。 抽象方法和抽象类的规则如下: - 抽象类必...
    王毅巽阅读 323评论 0 0
  • 对于面向对象编程来说,抽象是它的一大特征之一。在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类。接口...
    Q南南南Q阅读 368评论 0 3
  • 2017.1.10. 不得不说,命运这种东西,是存在的。也许,有些事情早就已定。
    reviewliquor阅读 116评论 0 0