继承(extends)

继承[extends]

  • 继承的好处
  • 继承的示意图
  • 继承的使用细节
  • JVM的内存:继承的内存布局

继承的好处

 
    1)提高代码的复用性
    2)代码的扩展性和维护性提高了

继承的示意图

 
在这里插入图片描述

继承的使用细节

 
    1)子类继承了所有属性和方法,非私有的属性和方法可以在子类直接访问;但是私有属性和方法不能在子类直接访问,要通过父类提供公共的方法去访问;

    2)子类必须调用父类的构造器,完成父类的初始化;

    3)当创建子类对象时,不管使用子类的哪个构造器,默认情况下总会去调用父类的无参构造器;

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

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

    5)super( ) 在使用时,必须放在构造器第一行;

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

    7)java 所有类都是 Object 类的子类,Object 类是所有类的基类;
    在这里插入图片描述

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

    9)子类最多只能继承一个父类(指直接继承),即 java 中是单继承机制
          如何让 A类继承B类C类?【A 继承 B,B 继承 C】

    10)不能滥用继承,子类和父类之间必须满足 is-a 的逻辑关系。

// Music is a Person?
Music extends Persons;	// 不合理

// Cat is a Animal?
Cat extends Animal;	// 合理

JVM的内存:继承的内存布局

在这里插入图片描述

/**
 * 继承的本质
 */
public class ExtendsTheory {
    public static void main(String[] args) {
        Son son = new Son();
        // 要按照查找关系来返回信息
        // 1) 首先看子类是否有该属性
        // 2) 如果子类有这个属性,并且可以访问,则返回信息
        // 3) 如果子类没有这个属性,就看父类有没有这个属性 (如果父类有该属性,并且可以访问,就返回信息...)
        // 4) 如果父类没有就按照 3) 的规则,继续找上级父类,直到 Object...
        
        System.out.println(son.name);   // 返回的是 大头儿子
        System.out.println(son.age);    // 返回的是 39
        System.out.println(son.hobby);  // 返回的是 旅游
        
    }
}

class Grandpa{
    String name = "大头爷爷";
    String hobby = "旅游";
}

class Father extends Grandpa{
    String name = "小头爸爸";
    int age = 39;
    // private int age = 39;    此时 son.age 不能访问该数据并报错
    // 但是可以通过父类提供 getAge() 方法来访问 age
}

class Son extends Father{
    String name = "大头儿子";
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/409350.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

liunx前后端分离项目部署

文章目录 1、nginx的安装和自启动2.nginx负载均衡3.前后端项目部署-后端部署4.前后端项目部署-前端部署 1、nginx的安装和自启动 yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel1.安装我们nginx所需要的依赖 wget http://nginx.org/download/nginx-1.…

线程池的常用实现及执行流程

线程池 线程池线程池接口线程池参数线程池分类动态数目线程池固定数目线程池单例线程池任务调度线程池 线程池的执行流程 线程池 线程池接口 线程池参数 1、corePoolSize:核心线程数,线程池中最少线程,核心线程不会被回收。 2、maximumPoo…

做接口测试的流程一般是怎么样的?UI功能6大流程、接口测试8大流程这些你真的全会了吗?

在讲接口流程测试之前,首先需要给大家申明下:接口测试对于测试人员而言,非常非常重要,懂功能测试接口测试,就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试,一般也是面试笔试必问。为方便大家更…

自定义搭建管理系统

最近使用自己搭建的脚手架写了一个简易管理系统,使用webpackreactantd,搭建脚手架参考: 使用Webpack5搭建项目(react篇)_babel-preset-react-app-CSDN博客 搭建的思路: 1. 基建布局,使用antd的…

Linux调用可执行程序:system()函数和execl函数

system()函数: system()函数是一个在C/C编程语言中的库函数,用于在操作系统中执行命令。 函数声明如下: int system(const char *command);该函数接受一个指向以空字符结尾的字符串的指针作为参数,该字符串包含要执行的命令。函…

[ai笔记12] chatGPT技术体系梳理+本质探寻

欢迎来到文思源想的ai空间,这是技术老兵重学ai以及成长思考的第12篇分享! 这周时间看了两本书,一本是大神斯蒂芬沃尔弗拉姆学的《这就是ChatGPT》,另外一本则是腾讯云生态解决方案高级架构师宋立恒所写的《AI制胜机器学习极简入门》&#xf…

OpenHarmony Docker移植实践

Docker简介 从操作系统诞生之日起,虚拟化技术就不断的演进与发展,结合目前云原生的发展态势,容器无疑是其中的重要一环。 Docker是一个开源的软件项目,可以在Linux操作系统上提供一层额外的抽象,让用户程序部署在一个…

单日收益四位数的Ai姓氏头像项目

单日收益四位数的Ai姓氏头像项目 发布时间:2024-02-24 00:00:00作者:傲战浏览:未知分类:教程网朗读: 最近利用AI一键生成头像的这个项目又火起来了,据说一天直播间光礼物就能收到大几千 操作起来没什么难度,一键生成 …

HarmonyOS-ArkTS卡片运行机制和相关模块

ArkTS卡片运行机制 实现原理 图1 ArkTS卡片实现原理 卡片使用方:显示卡片内容的宿主应用,控制卡片在宿主中展示的位置,当前仅系统应用可以作为卡片使用方。卡片提供方:提供卡片显示内容的应用,控制卡片的显示内容、…

LeetCode--代码详解 235.二叉搜索树得最近公共祖先

235.二叉搜索树得最近公共祖先 题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可…

nginx------------- 变量 日志分割 自定义图标 证书 (四)

一、高级配置 1 .1网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现,在编译安装nginx的时候需要添加编译参数 --with-http_stub_status_module,否则配置完成之后监测会是提示语法错误注意: 状态页显示的是整个服务器的状态,而非虚拟主机…

RunnerGo五种压测模式你会配置吗?

我们在做性能测试时需要根据性能需求配置不同的压测模式如:阶梯模式。使用jmeter时我们需要安装插件来配置测试模式,为了方便用户使用,RunnerGo内嵌了压测模式这一选项,今天给大家介绍一下RunnerGo的几种压测模式和怎么根据性能需…

使用GPT生成python图表

首先,生成一脚本,读取到所需的excel表格 import xlrddata xlrd.open_workbook(xxxx.xls) # 打开xls文件 table data.sheet_by_index(0) # 通过索引获取表格# 初始化奖项字典 awards_dict {"一等奖": 0,"二等奖": 0,"三等…

针对无法确定连接参数的网口通讯PLC采集方案

年前碰到了一个需求, 需要针对倍福PLC进行数据采集, 搞定了PLC通讯协议后, 最大的问题出现了, 我们不知道PLC的密码, 没办法进入到PLC查询到点位, 而且也没办法对PLC设置路由, 导致没有办法连上…

软件开发的艺术与科学

随着科技的飞速发展,软件开发已成为当今社会不可或缺的一部分。从智能手机应用程序到企业级管理系统,软件开发已经渗透到我们生活的方方面面。本文将探讨软件开发的重要性和现状,以及开发过程中涉及的关键环节和常见问题。 一、软件开发的重…

外包干了3个月,技术倒退1年。。。

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

海豚调度DolphinScheduler入门学习

DS简介: DolphinScheduler 是一款分布式的、易扩展的、高可用的数据处理平台,主要包含调度中心、元数据管理、任务编排、任务调度、任务执行和告警等模块。其技术架构基于 Spring Boot 和 Spring Cloud 技术栈,采用了分布式锁、分布式任务队列…

【Vuforia+Unity】AR04-地面、桌面平面识别功能(Ground Plane Target)

不论你是否曾有过相关经验,只要跟随本文的步骤,你就可以成功地创建你自己的AR应用。 官方教程Ground Plane in Unity | Vuforia Library 这个功能很棒,但是要求也很不友好,只能支持部分移动设备,具体清单如下: 01.Vuforia的地面识别功能仅支持的设备清单: Recommended…

无刷电机的关键参数

不同值的参考电压的产生方法: BLDC&PMSM: 无刷电机也可以分为直流无刷电机和交流无刷电机。两者的主要区别在于电源类型和控制方式。直流无刷电机通常采用方波控制,也称为六步控制。这种控制方式下,电机的相电流波形接近方波。控制算法相…

从专业到大众:Sora如何颠覆传统视频制作模式

随着科技的飞速进步,人工智能(AI)技术正逐渐渗透到我们生活的方方面面。在视频制作领域,OpenAI推出的Sora模型为这一传统行业带来了前所未有的变革。Sora不仅改变了视频制作的技术门槛,更将视频制作从专业人士的手中解放出来,推向…