ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE_多态

2022-05-16 20:01:58  阅读:167  来源: 互联网

标签:子类 多态 接口 抽象 JavaSE 方法 抽象类


多态

多态性主要表现在两个方面:

  • 重载:一个类中定义多个名字相同而实现不同的成员方法
    • 要求与父类的方法名必须相同
    • 方法的参数列表一定不一样
    • 访问修饰符和返回值类型可以相同但也可以不同,但仅修饰符和返回值类型不同不构成重载
  • 重写:对继承父类的某个成员方法进行重新实现
    • 方法名与返回值类型必须与父类相同
    • 参数列表必须相同
    • 访问权限不能比父类中被重写的方法的访问权限低
    • 子类若跟父类在同一个包中,父类中除了private和final的方法均可被重写
    • 构造方法不能被重写,每个方法均有属于自己的构造方法

多态中成员访问特点

  • 成员变量:编译看左边,执行看左边
  • 成员方法:编译看左边,执行看右边
    • 为什么成员方法和成员变量的访问不一样 因为成员方法有重写,而成员变量没有

多态的利弊

好处

  • 提高了程序的扩展性
    • 定义方法的时候,使用父类型作为参数,在将来使用时,使用具体的 子类型参与操作

弊端

  • 不能使用子类所特有的功能
    • 上转型对象不能访问其子类对象新增加的成员变量和方法,只能访问被子类继承并重写的变量或方法

抽象类

抽象类特点

  • 抽象类和抽象和方法必须使用abstract关键字修饰

  • 抽象类中不一定有抽象方法,有抽象方法的一定是抽象类

  • 抽象类原则上必须被继承,抽象方法必须被重写

  • 抽象类的子类

    • 要么重写抽象类中的所有抽象方法、
    • 要么该子类也是抽象类
  • 抽象类不能实例化

    • 若一定要实例化抽象类,可参照多态的方式,通过子类对象实例化,这叫抽象类多态

抽象类的成员特点

  • 抽象类中有成员变量

    • 可以是变量,也可以是常量
  • 抽象类中有构造方法

    • 虽有构造方法,但不能实例化。其存在的作用是用于子类访问父类数据的初始化
  • 抽象类中有成员方法

    • 可以有抽象方法:限定子类必须完成某些动作;也可以有非抽象方法:提高代码复用性

接口

接口的特点

  • 接口用关键字interface来修饰,用implement来实现接口
  • 在JDK8以后,可以有默认实现方法,须使用default关键字来修饰,亦可有静态方法
  • Java中只支持单继承父类,但允许一个类同时实现多个接口,同时也可以继承多个接口,且一个接口可以被多个不同的类来实现
  • 接口中声明属性默认为public static final,都是常量
  • 接口中定义的方法默认为public abstract,都是抽象方法
  • 若一个非抽象类实现某接口,则该类必须重写该接口中的所有方法,而且要显式地在这些被重写的方法前加public进行修饰
  • 接口的实现类
    • 要么重写接口中的所有抽象方法
    • 要么是抽象类
  • 接口不能实例化 若一定要实例化接口,可参照多态的方式,通过实现类对象实例化,这叫接口多态。
    • 多态的类型:具体类多态、抽象类多态、接口多态

接口的成员特点

  • 成员变量

    • 只能是常量, 默认修饰符:public static final
  • 成员方法

    • 只能是抽象方法, 默认修饰符:public abstract
  • 构造方法

    • 接口没有构造方法,接口主要对行为进行抽象,没有具体存在
    • 一个类如果没有父类,默认继承Object类

抽象类和接口的区别

  • 成员区别

    • 抽象类:有变量、常量、构造方法;有抽象方法、非抽象方法
    • 接口:只有常量;只有抽象方法
  • 关系区别

    • 类和类的关系:继承关系,只能单继承,但是可以多层继承

    • 类和接口的关系:实现关系,可以单实现,也可以多实现,还可以在继承一个类的同时实现多个接口

    • 接口和接口的关系:继承关系,可以单继承,也可以多继承

  • 设计理念区别

    • 抽象类:主要对类进行抽象,包括属性、行为
    • 接口:主要对行为进行抽象

抽象类名作为形参和返回值

  • 方法的形参是抽象类名,其实需要的是该抽象类的子类对象
  • 方法的返回值是抽象类名,其实返回的是该抽象类的子类对象

接口名作为形参和返回值

  • 方法的形参是接口名,其实需要的是该接口的实现类对象
  • 方法的返回值是接口名,其实返回的是该接口的实现类对象

标签:子类,多态,接口,抽象,JavaSE,方法,抽象类
来源: https://www.cnblogs.com/outsider-jwl/p/16278289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有