当前位置: 首页 > news >正文

java之继承和多态的认识

继承

定义两个类 一个狗类一个猫类

通过观察可以发现 这两个类之间有一些共性 当我们把这些共性抽取出来 放到另一个类中 需要就拿 这样就可以大大减小代码体积实现代码的复用

extends是继承的关键字 而Cat和Dog相当于子类 Animal相当于父类

子类可以直接访问父类的对象

当子类和父类的对象重名时 会优先访问子类的

如果需要访问父类的与自己类同名的成员 使用super引用

可以通过super访问父类的成员,super就是一个简单的关键字 提高代码的可读性

super只能指代当前类的父类 不能指代父类的父类甚至更上层的父类

super与构造方法

当给父类提供构造方法时发现子类都报错了

但当给子类也提供构造方法时(super)报错消失 这是为什么

当子类继承父类时 要调用父类的构造方法 先帮助父类进行初始化

使用super调用的时候必须要在第一行

在构造子类对象时 先执行父类(基类)的构造方法 再执行子类的构造方法

super()和this()

相同点

  • 都是Java中的关键字
  • 只能在类的非静态方法中使用,用来访问非静态成员方法和字段
  • 在构造方法中调用时,必须是构造方法中的第一条语句,并且不能同时存在

不同点

  • this是当前对象的引用,当前对象即调用实例方法的对象,super相当于是子类对象中从父类继承下来部分成员的引用
  • 在非静态成员方法中,this用来访问本类的方法和属性,super用来访问父类继承下来的方法和属性
    • 构造方法中一定会存在super(...)的调用,用户没有写编译器也会增加,但是this(...)用户不写则没有

protected关键字

  • private 只能在当前类使用(同一包同一类
  • default(什么都不写) 同一个包中的所有类可以使用 (同一包不同类
  • public 在哪都能使用(不同包不同类
  • protected 同一个包中所有类可以使用 不同包中只有子类能使用(同一包中的所有类和不同包子类

在子类情况下不报错可以正常访问

在非子类情况下报错

多态

多态的概念

通俗来说,就是多种形态,具体点就是去完成某个行为,当不同的对象去完成时会产生出不同的状

向上转型

通俗来说就是把子类对象给到父类进行引用

这里Dog类继承父类Animal 用到了向上转型(这是第一种向上转型方式)

这里形参animal引用了实参dog(这是第二种向上转型的方式)

这里返回类型是Animal 返回值是dog(这是第三种向上转型的方式)

  • 直接赋值
  • 方法的传参
  • 返回值

向上转型的缺点是不能调用子类特有的方法(因为引用是Animal所引用的 要调只能调父类自己的)

方法的重写

这里发生了方法的重写

  • 方法名一样
  • 参数列表一样(顺序&个数&类型)
  • 返回值一样(方法返回值类型构成父子关系也算

重写 的注意事项

  • 父类被final,private,static修饰的方法不能被重写
  • 如果子类重写父类的方法 子类的访问修饰符的权限要大于等于父类的修饰权限

问题来了:为什么调用eat会执行子类的eat方法呢

答案 这是动态绑定

系统在编译的时候确实调用了父类的eat方法 但通过父类的引用实际调用了子类的eat 这种情况下是动态绑定

动态绑定发生的大前提是一定要在继承的条件下

多态

animal引用的对象不同 但调用的方法相同 所产生的结果也不相同 这种现象称为多态

http://www.jsqmd.com/news/487718/

相关文章:

  • 计算机毕业设计springboot温州商学院职称评审系统 基于Spring Boot的温州商学院教师职称评审管理系统设计与实现 温州商学院职称评审平台的Spring Boot架构开发
  • DeepSeek-OCR在AI办公中的应用:会议纪要OCR→Markdown→Notion同步
  • Unity面试总结
  • 雯雯的后宫-造相Z-Image-瑜伽女孩提示词模板库:20组已验证瑜伽体式+环境+服饰组合
  • LM Studio 国内高效使用指南:从下载到模型部署全流程解析
  • ssm+java2026年毕设勤工俭学管理系统【源码+论文】
  • map/filter/reduce:数组10个常用实战操作|JS 基础语法与数据操作篇
  • PIM 协议
  • C语言洛谷刷题总结7(题单【入门6】函数与结构体)
  • kkFileView 源码编译实战:从零构建最新预览服务安装包
  • 淡入淡出的button控件,源代码
  • Agentic AI提示工程:多任务学习策略的实战经验
  • # 英语听力提升方法(适合词汇量约1200的学习者)
  • 解决VSCode Remote-SSH连接失败的常见问题与排查方法
  • 【Java从入门到入土】06:String的72变:从字符串拼接到底层优化
  • 代码随想录算法训练营第九天 | 翻转字符串里的单词 、右旋转字符串
  • Qwen3-TTS-Tokenizer-12Hz实战案例:有声书制作中章节音频统一token化方案
  • SpikeTrack: A Spike-driven Framework for Efficient Visual Tracking—— 一种用于高效视觉追踪的脉冲驱动框架
  • VSCode结合EmmyLua实现Lua代码高效调试指南
  • 深入解析javax.net.ssl.SSLHandshakeException:如何修复No negotiable cipher suite错误
  • 计算机网络基础:网络互联与核心设备 | 0基础入门必看
  • MedGemma 1.5保姆级教程:从Docker拉取镜像到浏览器访问6006端口
  • Qwen Pixel Art保姆级教程:从Docker安装到提示词工程(含20个优质模板)
  • ssm+java2026年毕设清空购物商城系统【源码+论文】
  • VideoAgentTrek-ScreenFilter在开源社区的应用:自动净化项目演示视频
  • ssm+java2026年毕设情报综合管理系统【源码+论文】
  • 烟花算法(FWA)实战:从原理到MATLAB实现与优化策略解析
  • 第三方应用程序漏洞和木马制作小实验
  • springboot基于Java的免税商品优选购物商城设计与实现代码.7z(源码+论文+ppt答辩)
  • ssm+java2026年毕设求知书友屋网站【源码+论文】