Java基础 接口和抽象类

“简单不先于复杂,而是在复杂之后.” —— Alan Perlis

2.jpg

接口

首先,理解多继承,什么是多继承----多继承就是可以继承多个父类,但是Java不能实现多继承,所以 这里就要用到接口了.


接口是一种规范,是一种规则,它只给出了方法的样子,规定你要实现哪些方法,而不给出方法的实现,让接口的实现类去实现这些方法,但是对于不同的实现类来说,对方法的实现可以完全不同。

• 接口的实现类如果实现了某一个接口,那么必须实现接口中定义的所有的待实现的方法。如果你不想要实现方法,那么实现类必须定义为抽象类,不想实现的方法必须定义为抽象方法。

•接口中定义的属性和方法的默认访问级别都是public,所以方法肯定不被private所修饰,所有的方法前都默认包含了abstract ,表明它是一个抽象方法,但是可以省略,而且默认是省略的

• 接口可以看成是一个抽干了的抽象类,它里面所有的方法都是抽象的,都是不能给出任何实现部分的

• 因为接口可以看成是一种特殊的“抽象类”,而且因为抽象类可以继承别的类,所以接口也可以继承接口,也只可以继承接口。但是接口不可以实现接口。

• 一个类可以实现多个接口使用关键字implements ,一个接口可以继承多个接口使用关键字extends,一个类可以同时继承一个别的类,而且实现一个或多个接口,但是关键字extends要在前。


注意事项:

1.接口可以看成是特殊抽象类,提供方法原型,没有具体表现,即方法具体实施

2.子类必须提供父类中抽象方法的实现方式。

3.接口中只能包含抽象方法和常量,不能有,变量,初始化块和构造函数


接口的声明

【修饰符】interface 接口名【extends】父类接口名 {

常量;

方法:抽象

}

注意事项:与Java的类文件一样,接口文件的文件名必须与接口名相同

使用接口:

接口不能单独实例化,要想实例化接口,必须接口的实现类来完成。接口的实现类,必须全部实现接口中所有方法。

【修饰符】 class <类名> 【extends 父类名】【implements 接口列表】{

}

不严密理解为这样: 接口是一个类,里面有常量和方法,然后再一个类中调用,重写接口中的方法,但是这个调用不是与以往调用一样,是有区别的,要用implements这个关键字来操作。调用完后实例化


抽象类和方法

如果一个方法中存在不可预知的方法实现,那么这个方法所在的类就应该声明为抽象类

• 如果在两个类当中有同名的方法,按照正常道理来说,应该提取到父类里,但是这个两个方法又有明显的方法实现上的不同,那么在父类里的方法,就应该定义成为抽象,抽象方法,只给出了方法的样子,而不给出方法的具体实现,具体实现由继承这个类的具体的子类去实现

• 抽象方法,必须在抽象类里,抽象类里不一定有抽象方法

• 没有抽象方法的抽象类的存在也是有意义的。这决定了这个类是不能被直接实例化的,他的作用基本上是作为一个“框框”存在的。-------------种猪

• 重写的前提是--- 父类里知道该方法如何去实现,子类不打算走原路,所以覆盖父类里的实现,

• 父类不给出实现,也不知道该如何实现,由具体的子类自己决定如何实现,但是给出一个定义,要求子类必须实现。


接口和抽象类的区别

接口是用来被实现的(implements),而抽象类是用类被继承的 (extends)

• 接口可以继承别的多个接口,组成一个新的接口

• 抽象类可以继承一个别的类,或实现一个或多个接口

• 接口是一个100%的抽象类,里面的方法没有任何一个有任何的实现

• 抽象类可以包含非抽象的方法,也就是说可以给出某一些方法的实现。

• 接口一般处于代码的最底层,作出一些规定,而接口之上一层抽象类层,对接口进行第一次的实现,把不可能一次完成的方法,交由自己的子类来实现。

• 抽象类可以有构造方法,而接口不可以有构造方法。 接口中定义的变量只能为公有的,静态的,终态的,而且会默认增加。


Java 接口和Java 抽象类对比

1 )Java 接口和 Java 抽象类最大的一个区别,就在于 Java 抽象类可以提供某些方法的部分实现,而 Java 接口不可以,这大概就是 Java 抽象类唯一的优点吧,但这个优点非常有用。如果向一个抽象类里加入一个新的具体方法时,那么它所有的子类都一下子都得到了这个新方法,而 Java 接口做不到这一点,如果向一个 Java 接口里加入一个新方法,所有实现这个接口的类就无法成功通过编译了,因为你必须让每一个类都再实现这个方法才行,这显然是Java 接口的缺点。

2 )一个抽象类的实现只能由这个抽象类的子类给出,也就是说,这个实现处在抽象类所定义出的继承的等级结构中,而由于 Java 语言的单继承性,所以抽象类作为类型定义工具的效能大打折扣。在这一点上,Java 接口的优势就出来了,任何一个实现了一个 Java 接口所规定的方法的类都可以具有这个接口的类型,而一个类可以实现任意多个 Java 接口,从而这个类就有了多种类型。

3 )从第 2 点不难看出,Java 接口是定义混合类型的理想工具,混合类表明一个类不仅仅具有某个主类型的行为,而且具有其他的次要行为。

4 )结合 1、2 点中抽象类和Java 接口的各自优势,具经典的设计模式就出来了:声明类型的工作仍然由Java 接口承担,但是同时给出一个Java 抽象类,且实现了这个接口,而其他同属于这个抽象类型的具体类可以选择实现这个 Java 接口,也可以选择继承这个抽象类,也就是说在层次结构中,Java 接口在最上面,然后紧跟着抽象类,哈,这下两个的最大优点都能发挥到极至了。这个模式就是“缺省适配模式”。

在Java 语言 API 中用了这种模式,而且全都遵循一定的命名规范:Abstract +接口名。 Java 接口和Java抽象类的存在就是为了用于具体类的实现和继承的,如果你准备写一个具体类去继承另一个具体类的话,那你的设计就有很大问题了。Java 抽象类就是为了继承而存在的,它的抽象方法就是为了强制子类必须去实现的。

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

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,635评论 0 11
  • 一、抽象类 1、抽象类含义的概括: 当多个类出现相同功能时,但功能主体不同,这样可以向上抽取,抽取时只抽取功能定义...
    玉圣阅读 828评论 0 6
  • 1、接口 • 接口是一种规范,是一种规则,它只给出了方法的样子,规定你要实现哪些方法,而不给出方法的实现,让接...
    coolchun阅读 668评论 0 3
  • 一群快毕业正在赶paper的小姑娘,很想去校园能看到的远方的海边玩耍,尤其是每次图书馆苦哈哈的憋字数的饭后散步看到...
    Lola欢阅读 221评论 0 0