一、继承

1.1 、什么是继承?

  • 继承就是把所有的类的公共部分(相同的成员)提取出来,放到一个类中
  • 继承需要使用 extends 关键字
public class Animal{
public String name;
}
public class Dog extends Animal{}

Dog 是 Animal 的子类,Animal 是 Dog 的父类,发生继承关系后子类中包含有父类中的成员(成员方法和成员变量)

  • 子类中要有自己特色的代码,否则直接调用父类就行了,还要子类干嘛?

1.2、为什么继承?

  • 因为继承是把所有类的公共部分提取取来放到一个类中,那么想用这公共部分的类可以继承,那么就实现了代码的复用性

1.3、继承的好处?

  • 我们知道,父类是公共成员,那么子类中也有子类的特色成员,除了实现代码的复用外,还让代码有拓展的能力

1.4、父类成员的访问

  • 当子类继承父类后,通过子类的对象是可以访问父类当中的成员变量和成员方法的。
  • 就是表明子类创建出来的对象,包含了父类的内容
  • 子类和父类的内存布局如下
    在这里插入图片描述

1.4.1、子类和父类不存在同名成员变量

  • 子类new对象,用引用直接访问就行,比如你访问的是一个变量,他的机制就是首先在子类中寻找,如果没有,就到父类中寻找,父类中也没有的话就会报错
Dog dog1 = new Dog();
//这样就能访问到父类的name
dog1.name;

1.4.2、子类和父类的成员变量同名

  • 如果有同名的话,加 this 就是子类中的,加 super 就是父类的
//假如子类中也有name 叫 旺财 , 父类中也有相同的变量name 叫 大黄
this.name; // 那么就会访问子类中的name输出旺财
super.name; // 那么就会访问父类中的name 输出大黄

如果什么都不加呢?上面我说他的访问机制是先从子类找,再到父类找,所以优先访问子类的

1.4.3、子类和父类的成员方法名字不同

  • 调用谁就是谁,和成员变量一样

1.4.4、子类和父类的成员方法名字相同

  • 如果完全一样(包括参数)那么子类的优先, 子类没有就调用父类的,父类没有就报错,如果构成了重载那么就是 调用谁就是谁

1.5、super关键字

1.5.1、什么是super关键字?

  • super 主要作用是在子类中访问父类的成员
  • 如果两个类发生了继承关系的话,我们知道子类中有父类的成员,所以如果我们想调用父类的成员那么怎么调用呢?此时就有了super ,super是子类中属于父类那一部分内存空间的标识,所以就可以使用super调用父类的成员

1.5.2、super 关键字的用法?

  • super 的用法是访问父类的成员方法
  • 访问父类的成员变量
  • 访问父类的构造方法

1.5.3、super 关键字使用的范围

  • super 只能在非静态的方法中使用,或者在子类中访问父类的成员
  • super 调用父类构造方法时,和this调用当前类的另一个构造方法一样,需要调用几个参数的就调用几个参数的,并且要放在子类的构造方法中的第一行代码。我们知道this()也需要放在第一行,所以super()和 this() 不能同时使用,否者不知道哪个是第一行的

1.5.4、super 和 this 的区别

  • 修饰变量时 super 调用的是父类中的成员变量,而 this 调用的是当前引用所指的对象的成员变量
  • 修饰方法时 super 调用的是父类中的成员方法,而 this 调用的是当前引用所指的对象的成员方法
  • 调用构造方法时 super 调用的是父类的构造方法,而this 是调用当前类的另一个构造方法
  • 因为在调用完成子类的构造方法之前要调用父类的构造方法,如果父类是系统默认的构造方法(即无参的构造方法),那么在子类的构造方法中系统会在第一行默认隐藏一个super调用父类构造方法的代码。所以super()系统有时会调用,而this()只能自己写才调用

1.6、子类构造方法

  • 我们知道子类中也会有成员变量的,有变量就少不了初始化,既然子类的需要初始化,那么父类的成员变量也是需要初始化的,究竟该怎么写构造方法呢?俗话说有父才有子,所以需要初始化父类的成员变量先,再初始化子类的成员变量。那么就有了在子类构造方法完成之前先调用父类的构造方法(即使用super()调用),需注意的是super()必须要放在子类构造方法的第一行
  • 子类的构造方法中,一定有super();

1.7、继承关系上代码块等的初始化顺序

  • 前面我们讲过代码块的初始化顺序,优先执行静态代码块,接着到实例代码块,最后到构造方法,同级的按顺序
  • 那么在继承关系下,他们的执行顺序是怎么样的呢?
  • 我们在上面知道,先有父再有子,先初始化父类,再初始化子类。但是我们也知道,静态代码块只要类一加载便执行,所以综上所述,先执行父类的静态代码块,再执行子类的静态代码块,接着执行父类的实例代码块,父类的构造方法,最后执行子类的构造代码块,子类的构造方法

1.8、protected 访问修饰限定符 的详解

  • 被 protected 修饰后 不同包中的子类可以访问
  • 就是有一个类(Animal)存在包一中,有一个类(Dog)存在包二中,并且这两个类在包二中发生的了继承关系,那么在包二 Dog 这个类中可以访问包一Animal 中 被 protected 修饰过的 成员变量
  • 那么在包二中非继承包一Animal 的类是不能访问的
  • 那么如果在包二中再创建一个 Cat 类 并且继承于Animal,那么它在自己的类中可以访问Animal中被 protected 修饰的成员变量,但是当Cat 在 Dog类中实例化对象时,这个引用不能访问父类中被 protected 所修饰的成员变量,所以说 他只能在自己的(Cat)子类中访问,不能在其他(Dog)子类中访问
public class Dog extends Animal{
}

1.9、继承的方式

  • A 继承 B ,B < — A;单继承
  • A 继承 B ,B 继承 C C < — B < — A;多层继承

在A实例化出来的对象的引用可以访问 C中的成员

  • A 继承B ,a 继承 B B < — A , B < — a;一个类被多个类继承
  • 注意:Java不支持一个类同时继承两个或两个以上的类

1.10、final关键字

1.10.1、什么是final关键字

  • final 是不可更改的意思
  • 可以修饰变量,语句,方法,类

1.10.2、final 关键字修饰变量 或字段

  • 当final修饰变量时,把变量变成了常变量,意思就是把一个变量变为常量

1.10.3、final关键字修饰方法

  • 当final 修饰方法时,表明这个方法不能被重写

1.10.4、final 关键字修饰类

  • 当final修饰类时,表明这个类不能被继承

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/92139.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/92139.shtml
英文地址,请注明出处:http://en.pswp.cn/web/92139.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

强化应急通信生命线:遨游三防平板、卫星电话破局极端灾害救援

暴雨倾盆&#xff0c;山洪咆哮&#xff0c;城市陷入内涝。今年进入汛期以来&#xff0c;我国广东、福建、河南、陕西、京津冀等地相继遭遇暴雨、洪涝、山洪等灾害&#xff0c;道路损毁、基站断网、电力中断等次生问题为应急响应带来严峻挑战。如何保障极端场景下的通信畅通&…

【Linux系统】进程间通信:命名管道

1. 匿名管道的限制匿名管道存在以下核心限制&#xff1a;仅限亲缘关系进程&#xff1a;只能用于父子进程等有血缘关系的进程间通信&#xff08;如通过 fork() 创建的子进程&#xff09;。单向通信&#xff1a;数据只能单向流动&#xff08;一端写&#xff0c;另一端读&#xff…

Python Day24 多线程编程:核心机制、同步方法与实践案例

一、线程事件对象&#xff08;threading.Event&#xff09;threading.Event 用于实现线程间的通信&#xff0c;可让一个线程通知其他线程终止任务&#xff0c;核心是通过 “事件触发” 机制协调线程行为。核心方法&#xff1a;创建事件对象&#xff1a;event threading.Event(…

007 前端( JavaScript HTML DOM+Echarts)

一.html dom运用查找html元素的三种方式通过 id 找到 HTML 元素通过标签名找到 HTML 元素通过类名找到 HTML 元素1.通过 id 找到 HTML 元素<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>msf的网页</title> <…

实习文档背诵

实习内容:1.定时任务与数据补全:基于 XXL-JOB 实现分布式定时任务调度&#xff0c;补全近半年历史操作日志数据&#xff0c;有效解决因网络异常导致的数据缺失问题。业务场景&#xff1b;集团的4a日志半年内没有同步&#xff0c;这边需要把日志数据同步到集团上首先先评估每天的…

分布式CAP定理

CAP 定理在一个分布式系统中&#xff0c;以下三个特性不可能同时完全满足&#xff0c;最多只能满足其中两个&#xff1a;C&#xff08;Consistency&#xff0c;一致性&#xff09;&#xff1a;所有节点在同一时间看到的数据是完全一致的&#xff08;即更新操作成功并返回后&…

PHP-Casbin:现代化 PHP 应用的权限管理引擎

在当今复杂的Web应用中&#xff0c;精细化的权限管理是保障系统安全的关键环节。PHP-Casbin 作为Casbin生态的PHP实现&#xff0c;凭借其灵活的模型支持和强大的扩展能力&#xff0c;已成为PHP开发者实现访问控制的首选工具。 超越传统权限模型 PHP-Casbin 基于PERM&#xff…

FastDeploy2.0:环境变量的说明

一、执行# 设置日志目录 export FD_LOG_DIR/workspace/models/log# 指定使用的 GPU 设备 export CUDA_VISIBLE_DEVICES0,1,2,3# 创建日志目录&#xff08;如果不存在&#xff09; mkdir -p "$FD_LOG_DIR"# 定义日志文件路径 LOG_FILE"$FD_LOG_DIR/fastdeploy_se…

C语言:指针(1-2)

5. 指针运算指针的基本运算有三种&#xff0c;分别是&#xff1a;指针-整数指针-指针指针的关系运算5.1 指针运算在上面&#xff0c;我们知道&#xff0c;数组在内存中是连续存放的&#xff0c;只要知道第一个元素的地址&#xff0c;顺藤摸瓜就能找到后面的所有元素。那么&…

【多模态】DPO学习笔记

DPO学习笔记1 原理1.0 名词1.1 preference model1.2 RLHF1.3 从RLHF到DPOA.解的最优形式B. DPO下参数估计C. DPO下梯度更新D. DPO训练的稳定性2 源代码2.1 数据集构成2.2 计算log prob2.3 DPO loss1 原理 1.0 名词 preference model&#xff1a;对人类偏好进行建模&#xff0…

2025最新、UI媲美豆包、DeepSeek等AI大厂的AIGC系统 - IMYAI源码部署教程

IMYAI 系统部署与使用手册 一、系统演示 &#x1f539; 快速体验 前端演示地址&#xff1a;https://super.imyaigc.com后台演示地址&#xff1a;https://super.imyaigc.com/settings &#x1f539; 技术架构 前端&#xff1a;Vite Vue3 NaiveUI TailwindCSS Plyr后端&…

【关于Java的反射】

在 Java 编程中&#xff0c;反射&#xff08;Reflection&#xff09; 是一个非常强大的工具&#xff0c;它允许你在运行时动态地获取类的信息、创建对象、调用方法和访问字段。虽然反射功能强大&#xff0c;但它也有一些局限性和性能开销&#xff0c;因此需要谨慎使用。一、什么…

Gitee推出“移动软件工厂“解决方案 解决嵌入式与涉密场景研发困局

Gitee推出"移动软件工厂"解决方案 破解嵌入式与涉密场景研发困局 随着数字化转型浪潮的推进&#xff0c;软件开发正面临着前所未有的复杂环境挑战。特别是在嵌入式系统、FPGA开发以及涉密信息系统等特殊场景下&#xff0c;研发团队往往需要在高安全要求与有限网络环境…

低功耗16*8位四线串行8*4按键阵矩LED驱动专用电路

概述&#xff1a;PC0340是占空比可调的LED显示控制驱动电路。由16根段输出、8根位输出、数字接口、数据锁存器、显示存储器、键扫描电路及相关控制电路组成了一个高可靠性的单片机外围LED驱动电路。串行数据通过4线串行接口输入到PC0340&#xff0c;采用LQFP44L的封装形式。本产…

通过自定义注解加aop切面实现权限控制

前言&#xff1a;自定义注解&#xff0c;通过aop切面前置通知&#xff0c;对请求接口进行权限控制1&#xff0c;创建枚举类package org.springblade.sample.annotationCommon;import lombok.AllArgsConstructor; import lombok.Getter;import java.util.Arrays; import java.ut…

IDS知识点

在网络安全工程师、系统运维工程师等岗位的面试中&#xff0c;​​IDS&#xff08;Intrusion Detection System&#xff0c;入侵检测系统&#xff09;​​ 是高频考点&#xff0c;尤其是对网络安全防护、安全监控类岗位。以下是IDS的核心考点和必须掌握的知识点&#xff0c;按优…

Adobe Analytics 数据分析平台|全渠道客户行为分析与体验优化

Adobe Analytics 是业界领先的数据分析平台&#xff0c;帮助企业实时追踪客户行为&#xff0c;整合多渠道数据&#xff0c;通过强大的分析与可视化工具深入分析客户旅程&#xff0c;优化数字体验。结合 Adobe Experience Cloud&#xff0c;Adobe Analytics 成为推动数字化增长和…

【轮播图】H5端轮播图、横向滑动、划屏效果实现方案——Vue3+CSS position/CSS scroller

文章目录定位实现滑屏效果前置知识CSS: touch-action属性CSS: transform属性触摸事件forEach回调占位符准备阶段实现移动效果实现跟手效果触摸结束优化完整代码滚动实现滑屏效果前置知识CSS: scroll-snap-type属性准备阶段实现滑动效果实现吸附效果滚动条隐藏存在问题完整代码s…

忘记了WordPress管理员密码的找回方法

WordPress管理员密码找回方法 如果您忘记了WordPress管理员密码&#xff0c;可以通过以下几种方法找回或重置&#xff1a; 方法1&#xff1a;通过电子邮件重置(最简单) 访问您的WordPress登录页面(通常是wodepress.com/wp-admin或wodepress.com/wp-login.php) 点击”忘记密…

RAFT:让语言模型更聪明地用文档答题

RAFT&#xff1a;让语言模型更聪明地用文档答题 作者注&#xff1a; 本文旨在面向零基础读者介绍 UC Berkeley 提出的 RAFT&#xff08;Retrieval-Augmented Fine-Tuning&#xff09;方法。它是一种训练语言模型的新方式&#xff0c;让模型更好地利用“外部知识”——比如文档、…