29面向对象(中级)-继承

1.为什么需要继承

为了代码复用,少写重复代码。

比如:

  • 狗:吃饭、睡觉、跑
  • 猫:吃饭、睡觉、跳

吃饭、睡觉是重复代码。用继承,就可以把公共部分(属性,方法) 抽到一个父类 Animal 里。

2.定义

一句话定义

继承:子类复用父类的属性和方法,并且可以扩展自己的新功能。

3.语法

4.使用细节

(1)Java 只支持 单继承

  • 一个子类 只能有一个直接父类

  • 不允许:class A extends B,C{}(多继承 ×)

  • 但可以多层继承:A→B→C 是可以的

(2)子类不能继承父类的 private 成员

  • 父类的private 属性、方法在子类中存在**,但不能直接用,**必须通过父类的 public/protected 方法访问

(3)子类继承父类后,会拥有父类所有非私有成员

(4)子类不能继承父类的构造器

(5)在调用子类构造器的时候,虚拟机会先调用父类构造器(默认自动调用 super()),完成父类的初始化,再运行子类构造器。

为什么呢? 子类可以调用父类的属性,方法,那么必须先初始化父类,子类才能调用。

(6)如果父类没有提供无参构造器,则必须在子类的构造器中用 super 去指定使用父类的哪个构造器完成对父类的初始化工作,否则,编译不会通过。

(7)如果希望指定去调用父类的某个构造器,则显式的调用一下:super(参数列表)

(8)super在使用时,必须放在构造器第一行(super关键字只能在构造器中使用)

(9)super() 和 this()都只能放在构造器第一行,因此这两个方法不能共存在一个构造器

(10)java所有类都是Object类的子类,即Object 是所有类的基类,

如果一个类没有显式写 extends 某个类,编译器会自动让它继承 Object类

(11)父类构造器的调用不限于直接父类!将一直往上追溯直到Object类(顶级父类)

5.继承的本质

子类,父类,上级父类都有name变量,会输出什么呢?

son先找自身,自己没有就往上一级father找,father若没有就再往上一级grandpa找。按这个规律找到或报错为止。

相关推荐
高级程序源3 分钟前
springboot大学生体测系统72170-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·django·课程设计
IT研究室10 分钟前
最新计算机毕业设计选题推荐-基于spring boot的文学名著分享系统-网站-文档指导-Java-springboot
java·spring boot·课程设计
denlaku13 分钟前
JDK 13 新特性详解
java·开发语言
秋饼13 分钟前
Java 后端企业级 LLM 网关实战:Spring Cloud Gateway 构建统一大模型接入层
java·ai·技术分享·后端开发
今年下半年22 分钟前
【防重放】Spring Boot 通过自定义注解实现接口防重放
java·spring boot·自定义注解·防重放
WeiXin_DZbishe25 分钟前
基于Node.js的马拉松赛事管理系统的设计与实现-计算机毕设 附源码【课程设计】90211
java·javascript·vue.js·python·php·课程设计
Wang's Blog42 分钟前
Java 项目部署之 Docker工具快速入门: 使用 Docker 镜像命令练习
java·docker
企业数字化笔记1 小时前
多租户系统从哪里开始设计?租户身份、数据隔离、权限与套餐的整体方案
java·spring boot·后端·junit
tiger从容淡定是人生1 小时前
从 Gemini 的任务示例出发:AI 能否从知识中推导工作流?
java·人工智能·aigc·知识图谱·创业创新·零知识证明
Nebula_g1 小时前
JavaSE高级:动态代理
java·开发语言·算法·javase