day6-java基础(接口、多态、构造器)

接口:

1. 接口是什么

      就相当于同一个地区中的一个插座,开放了插口,只要有电器想要通电,都可以用它插头插入到插口中。
      接口,就相当于一个规范一样。
      接口的核心作用:解耦合,将组件之间的耦合度降低。
      原先,在团队开发中,如果要实现一个功能的话,需要指定一个开发者在某个指定的类写中一个方法来实现,
      然后需要调整的时候又要从头开头开始分析,会影响到当前开发者的工作。
       现在,需要实现一个功能很简单。按模块分开进行开发,没人负责一个内容,这个内容只需要某个工程师熟悉即可,
       实现功能之后提供接口给其他同事使用即可,如果有问题,只需要负责的工程师调试即可。其他人都不需要理会,只需要负责自己的业务逻辑即可。

2. 接口也是一种类型

       与抽象类,几乎一样。但它比抽象类,还要抽象。
       接口是功能的集合,也可以看做是一种数据类型。

3. 接口的使用方式

      使用接口,需要提供一个接口类,使用 interface 修饰。
      另外还需要提供一个实现类,用于实现接口。使用 implements 关键字实现指定的接口。
      接口中的方法,只提供方法声明,不提供方法的实现细节。为了安全,不向外提供方法实现,只需要返回对应结果即可。

4. 接口的好处

      因为方法也可以认为是功能,功能的定义可以与实现进行分离。
      当功能的细节,需要进行更改的时候,我们不需要去动方法的定义。我们只需要去对应的实现中进行更新即可,
      好处就是,方法的调用者不需要针对功能改变而改变方法的调用

5. 宗旨

       一切事物都有功能(方法),每个功能都需要把定义和实现进行分离,也就是说,一切事物都有接口。

6. 接口的初始化

      因为接口中没有实现,new 了之后得不到需要的实现细节,所以不能 new。
      我们需要初始化实现类,然后可以使用接口类型的变量接收实例。

7. JDK9 接口的新特性

      使用 default 关键字来修饰接口定义,可以设置默认值,可以不用强制在实现类中实现。
      如果需要覆盖默认值的话,重写方法即可。

8. 接口的多个实现类

      在前面,我们学习的继      使用了接口,其实可以在一定情况下,弥补了不能多继承的缺点。
      【可能出现的问题】在实现的时候,我们需要同时实现所有接口中必须要重写的方法。
      而且,要花很多精力来处理好不同接口之间方法的关系,和详细逻辑,调用的时候容易出现混乱。
      【解决方案】尽量在继承父接口后的子类中,使用额外的方法体来处理整个需要获取的数据。做到整合使用。
      步骤如下:
      1. 需要重写方法,没有关系,直接重写即可。
      2. 最好添加一些容易识别的方法,共调用者使用,获取对应的数据即可。

9. 接口和抽象类的区别

      狗: 宠物狗、缉毒犬、导盲犬 ---> 狗类(叫、咬、吃)abstract
      当某些事物有许多共同属性的时候,我们可以使用抽象类。
      当某些事物有独特的行为、额外的功能的时候,我们可以使用接口。
      相同点:
      1)都是跟继承有联系的,位于继承的顶端,主要是给其他类实现或者继承。
      2)都不能够进行实例化。抽象类的子类来实例化,接口的实现类来实例化。
      3)都可以包含抽象方法,子类在使用的时候,都需要去重写(覆盖)这些声明出来的方法。
      不同点:
      1)抽象类为部分方法提供实现,避免子类重复去实现这些方法,可以提高代码的重用性。
      接口只能是包含抽象方法的定义。
      2)一个类可以继承一个父类(抽象类),但我们可以实现多个接口,接口可以用来弥补 Java 的单继承缺点。
      3)抽象类主要是指一个事物中应该要有的内容,比如是 is..a 关系。
      4)接口主要是指一个事物中额外的内容,比如是 like..a 关系。
      如何选择使用:
      1)通过实际工作的效率上分析,要多用接口,少用抽象类。
      2)当需要定义子类的行为,还要为子类提供共有性能的时候,才选用抽象类。


    多态:多个状态

       儿子、女儿,学生, 朋友,客户,陌生人 -- 大林(人)
       Person 父类
       Son、Student、Friend、Customer 子类

       多态的特点:
       1)最终的多态体现在父类引用变量可以指向子类对象。
       Person person = new Son();
       2)多态的前提是必须要有子父类关系或者类实现接口关系,否则不能完成多态建设。
       3)在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法。
       eat(); 细嚼慢咽
       大林 --- 狼吞虎咽 √
       person.eat();

       语法格式:
       父类类型 变量名 = new 子类类型();

       1. 普通类型多态定义
       2. 抽象类多态定义
       3. 接口多态定义

       同一个父类的方法可以给多个不同的子类进行重写,在调用方法的时候,都是调用各个不同子类中重写后的方法。

       多态的成员变量
       当子类和父类中都出现同名的成员变量,多态在使用成员变量的时候有两个时期赋值:编译时、运行时。
       1)编译时:当我们的引用类型变量所对应的类中没有被调用的成员变量,则会编译失败。
       2)运行时:调用的是引用类型变量所对应的类中的成员变量的值。
       也就是说,如果在调用成员变量的时候,需要看赋值符号左边到底是哪个类?就需要用这个类中的成员变量。

       多态的成员方法
       1)编译时:当父类中定义的方法,子类中必须要重写。否则编译不通过,报错。
       2)运行时:看赋值符号右边到底实例化的是哪一个类?就用哪一个类中的成员方法。

       总结:成员变量看赋值符号左边,成员方法看赋值符号右边。

       多态的向上和向下转型:

       向上转型的话,其实是把子类对象赋值给一个直接父类的引用。这个过程是一个向上转型。
       如果我们直接 new 直接一个父类,没有办法实现向下转型。

       向上转型的使用注意点:
       动物类:Animal 子类:Dog、Cat

       向上转型的好处就是可以隐藏子类类型,提供了代码的扩展性。
       不好的地方,就是只能使用父类中共有的内容,如果想要使用子类中独有的内容时,需要额外向下转型才行。
       1)什么时候用向上转型?
       当我们不需要面对之类类型进行操作的时候,为了提供扩展性,或者使用父类功能就可以完成对应的操作就可以考虑
       使用向上转型。
       2)什么时候用向下转型?
       当要使用子类独有的功能时,必须要向下转型。
       另外,在进行转化的时候,需要留意时候会包 ClassCastException 异常。

      面向对象中三大特性的主要目的:

       封装:把对象的属性和方法的实现细节隐藏起来,可以对外提供一些公共方法进行访问。public 共有的, private 私有的
       继承:希望子类拥有父类中所有能用的功能,然后还可以在子类中进行增强。当需要注意,Java 只有单继承。
       多态:结合继承和方法的重写来提高代码的复用性和功能增强(扩展性)。


构造器(构造函数、构造方法)

       每一个类都有一个隐藏的无参构造器,主要是用来初始类的实例的。
       配合 new 关键字来使用,当开始 new 的时候,构造器就会被执行,会在堆内存中开辟一个空间存储对象实例。
       如果我们直接使用无参的构造器,所得到的实例是空的,没有任何值的。

       如果一个类中,出现一个有参构造器,则会默认覆盖无参构造器。
       如果还要用到无参构造器,需要我们手动添加出来才行。

       如何理解?

       无参构造器:就相当于你老妈生你一样 —— 什么都没没有,只会哭。
       有参构造器:就相当于哪吒老妈生他一样 —— 生出来就会有风火轮、圈圈、枪。

       构造器的总结:

       1. 构造器没有返回值,也不用去添加。
       2. 主要用来构造对象,创建完对象之后,就结束了,只执行一次。
       3. 构造器的名字,必须要和类名一致。
       4. 一个类中可以存在多个构造器,主要是以重载的形式存在。
       5. 可以使用 private 进行修饰,但修饰之后其他地方不能调用了。

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

推荐阅读更多精彩内容