美文网首页
day6-java基础(接口、多态、构造器)

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

作者: _拾年丶 | 来源:发表于2018-09-10 19:22 被阅读0次

接口:

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 进行修饰,但修饰之后其他地方不能调用了。

相关文章

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

    接口: 1. 接口是什么 就相当于同一个地区中的一个插座,开放了插口,只要有电器想要通电,都可以用它插头插入到插口...

  • Java构造器和多态

    最近复习Java的一些基础知识,看到构造器和多态这块,简单记录一下复习的内容 构造器构造器实际上是隐式声明的sta...

  • 面试必问

    方法重载 :不属于多态方法重写 :属于多态构造器: 构造器名称跟类名一样面向对象思想的三大特点:多态、封装、继...

  • 面试题(面试必答)

    方法重载 :不属于多态方法重写 :属于多态构造器: 构造器名称跟类名一样面向对象思想的三大特点:多态、封装、继承 ...

  • day04

    多态 8.3构造器和多态 尽管构造器并不具有多态性(它们实际上是static方法,只不过该static声明是隐式的...

  • 构造器与多态

    构造器与多态 通常情况下,对象销毁都是由jvm垃圾回收器进行处理,这里只是通过代码展示初始化顺序和清理操作顺序。 ...

  • java多态

    面向对象的三大特点是封装、继承、多态,其中extends类和implements接口是多态的基础,所谓多态,是对一...

  • 创建型设计模式.工厂方法模式

    概念理解 定义:虚拟构造器(Virtual Constructor)模式或者多态工厂(Polymorphic Fa...

  • Android-Interview

    Java 基础 1、 什么是面向对象(OOP)?2、 什么是多态?实现多态的机制是什么?3、 接口(Interfa...

  • Swift 2 学习笔记 14.继承和构造函数

    课程来自慕课网liuyubobobo老师 继承和构造函数 继承基础 多态性 重载 两段式构造 便利构造函数和指定构...

网友评论

      本文标题:day6-java基础(接口、多态、构造器)

      本文链接:https://www.haomeiwen.com/subject/rohegftx.html