java三大特性之【继承】

news2024/11/25 12:54:23

概念

继承就是将多个类的共性抽取出来,提出继承的概念。就是在进行共性抽取,实现代码复用。
在这里插入图片描述
提高代码的复用性,方便进行子类,子功能的扩展,将所有共性的内容放在父类(基类),子类只需要关注子类独有的属性和功能

父类和子类成员关系

  1. 父类和子类不存在同名的属性和方法
    在这里插入图片描述
  2. 子类和父类成员变量重名
    编译器的就近匹配原则:若子类中不存在该属性,才会从父类中寻找同名属性;若父类中也没找到同名属性,编译报错。
    在这里插入图片描述

问题:如果父类中的成员为私有,则变量为父类还是子类?

在这里插入图片描述

由于c在父类中是私有权限,在子类中不能直接使用
当父类中存在private私有域,子类在继承父类时,私有域无法直接使用,这种继承称为隐式继承

  1. 父类和子类中的方法调用
    当通过子类对象访问方法时
  • 若子类中存在该方法,则优先访问子类的同名方法:子类和父类完全想通过,方法名称,参数类型,则优先访问子类中的方法。
  • 若子类不存在该方法,则会从父类中寻找是否存在该方法,存在则调用,不存在则编译出错,一定注意隐式继承的问题。

继承中构造对象的产生顺序

继承的使用规则: 当产生子类对象时,默认先调用父类的构造方法产生父类对象后调用子类构造方法产生子类对象。
(先有父才有子,先产生父类对象然后产生子类对象)
在这里插入图片描述

super关键字

表示直接从父类中寻找成员变量或成员方法

1. super修饰属性,表示直接寻找父类的同名属性

在这里插入图片描述
私有属性无法被调用!

2. super修饰方法

2.1 super修饰普通成员方法

表示直接在父类中寻找同名方法
在这里插入图片描述
this和super的使用

  • this.方法是在当前类中寻找同名方法
  • super.方法是在父类中寻找同名方法

2.2 super修饰构造方法

表示显示在子类构造方法中调用父类的构造方法

  • 如果父类中没有无参构造,只包含一个有参构造,则在子类的构造方法中首行必须显式使用super(参数)关键字来调用父类的有参构造;
  • 若父类存在无参构造,则子类的构造方法首行可以不写super()

在这里插入图片描述
当存在父类继承时,一般在子类中不出现this的构造方法调用。
原因:
子类的构造方法首行必须使用super;
this的构造方法调用也得放在首行。

笔试题

在这里插入图片描述
静态块>构造块>构造方法

  • 静态块在类加载时执行一次,和具体产生对象无关,用于初始化静态变量
  • 类中的静态代码块还会优先于主方法执行

输出顺序:7,3,2,1,6,5,4,2,1,5,4,8
正确顺序:3,6,7,2,1,5,4,2,1,5,4,8

分析

  1. 主方法存在主类中,要执行主方法需要加载主类D,由于D继承于B,因此先加载B
    一旦加载类,静态代码块就会执行,则3(B的静态代码块),6(D的静态代码块)
  2. 进入主方法,输出7
  3. 产生子类对象D,首先需要产生父类对象B。
    对象的产生构造块和构造方法都会执行,则2154,2154执行两次
  4. 输出8

protected关键字

  • 在不同包的具有继承关系的之间可见,和对象是没有关系的。
  • 权限修饰符指的是在哪些“类”的内部可见,与具体的对象无关。
    由于default权限,是在同一个包的不同类之间可见
    protected(不同包之间的具有继承关系的类之间可见)>default
    因此,在同一个包的毫无关系的不同类之间,protected仍然可见!!!
    default有的权限,protected一定具备。

继承关系

java的单继承局限:一个类只能使用extends直接继承一个父类,不允许多重继承,但是允许多层继承

多重继承(不允许!!!):

public class C extends A,B{}

多层继承:

public class C extends B{}
public class B extends A{}

不同类继承于同一个类:

public class A{}
public class B extends A{}
public class C extends A{}

单继承:

public class A{}
public class B extends A{}

final关键字—终结器,到此为止

  1. final 修饰基本数据类型
    final 修饰的属性称为常量,一旦被final修饰的变量成为常量,初始化之后值不能修改

  2. final 修饰引用数据类型
    final 修饰的变量数值不能改,对于基本数据类型来说,就是具体的数值;对于引用数据类型,不可变的是引用类型的数值,即地址!!!与对象内部的内容无关。

final A a=new A()
//a对象内部的属性随意修改,但是a的指向不能修改
a.b=10;
a.b=20;
//报错,a无法再次指向别的A对象
a=new A();

a指向的对象不能修改

  1. final 修饰的属性使用之前必须进行赋值,一旦赋值,无法修改
  2. final 修饰的方法无法被重写/覆写
  3. final 修饰的类不能有子类
    JDK中String类就是final类

类和类之间的关系:继承和组合

  • 继承表示的是类之间的 is a 关系
//天然的继承关系,Dogs具备了Animal类中的所有属性和方法
Dog is a Animal;
  • 组合表示的是类之间的 has a 关系
School has a Student;
School has a Teacher;

组合关系也可以实现代码的复用,组合类的内部包含了其他类,直接调用其他类对象的属性和方法,实现代码复用。

总结:
组合和继承都可以实现代码复用,具体使用哪个关系需要根据具体场景进行判断。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

裁剪lua5.3.4

在 Lua 5.3.4 中,有一些宏定义可以缩小 Lua 的资源占用,包括: LUA_COMPAT_5_2:该宏定义可以将 Lua 5.3 的行为与 Lua 5.2 兼容,缩小 Lua 的资源占用。例如,该宏定义可以禁用一些 Lua 5.3 中新增的语法特性&…

在线协同办公小程序开发搭建开发环境

目录 介绍 开发环境说明 虚拟机 原因 VirtualBox虚拟机 VMware虚拟机v15 安装MySQL数据库 安装步骤 导入EMOS系统数据库 安装MongoDB数据库 启动Navicat,选择创建MongoDB连接 创建用户 搭建Redis数据库 配置Maven 安装IDEA插件 Lombok插件 …

基于Java+SpringBoot+Vue实现前后端分离美术馆管理系统

博主介绍:✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…

【哈佛积极心理学笔记】第15讲 完美主义

第15讲 完美主义 A person committed to excellence can still be as ambitious or more ambitious than a perfectionist. The difference between the two is just their approach toward the journey. There is no straight line toward success. Perfection vs Excellenc…

CMake入门(1)

背景 目前很多大型框架都是使用cmake去构建,如果看不懂cmake, 在实际修改框架,添加新的模块时候就会受制于人,为此需要了解cmake的相关基础支持,避免被某些装逼大佬卡脖子,同时也进一步提高自己的业务水平。 变量 c…

Hello算法学习笔记之数组与链表

一、数组 线性数据结构,其将相同类型元素(链表就不一定要存储相同类型的元素)存储在连续的内存空间中。。数组有Index 数组的优点:访问很高效,O(1) PS:元素长度是单个元素占用的内存空间&…

CSS基础学习--13 Display(显示) 与 Visibility(可见性)

一、定义 display属性设置一个元素应如何显示 visibility属性指定一个元素应可见还是隐藏 二、隐藏元素 - display:none或visibility:hidden 隐藏一个元素可以通过把display属性设置为"none",或把visibility属性设置为"hidden"。但是请注意&am…

Aprioi关联算法

国际权威的学术会议IEEE International Conference on Data Mining (ICDM) 评选出了数据挖掘领域的十大经典算法,他们分别是:C4.5、kMeans、SVM、Apriori、EM、PageRank、AdaBoost、KNN、Naive Bayes以及CART。今天就让我们共同探讨一下十大算法之一Apri…

红黑树的插入和删除

红黑树(C) 红黑树简述红黑树的概念红黑树的性质红黑树结点定义 一,红黑树的插入插入调整插入代码 二,红黑树的验证三,红黑树的删除待删除的结点只有一个子树删除结点颜色为红色删除结点颜色为黑色 删除的结点为叶子节点…

【OpenMMLab AI实战营二期笔记】第六天 MMDetection代码课

0. 环境检测和安装 # 安装 mmengine 和 mmcv 依赖 # 为了防止后续版本变更导致的代码无法运行,暂时锁死版本 pip install -U "openmim0.3.7" mim install "mmengine0.7.1" mim install "mmcv2.0.0"# Install mmdetection rm -rf mmd…

软考A计划-系统架构师-知识点汇总-上篇

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列 👉关于作者 专注于Android/Unity和各种游戏开发技巧&#xff…

Python转行的一点心得

Python现在非常火,语法简单而且功能强大,很多同学都想学Python!最近陆陆续续有很多小伙伴问我,学Python到底应该做什么,从事哪种岗位。下面是我们工作圈里面一些同学的苦恼: 一转行要趁早 上面类似的问题群里还有很多…

华为HCIA备考 易错题整理

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答:12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上,且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节? 答:4 4.关于…

阿里云创建ALB_Ingress

阿里云参考文档 1、编写alb AlbConfig创建文档 rootbiking-pre-middleware:~/alb# cat ingress-alb.yaml apiVersion: alibabacloud.com/v1 kind: AlbConfig metadata: #alb名称name: ingress-alb spec:config:name: ingress-albaddressType: InternetzoneMappings:# 两个交换…

chatgpt赋能python:Python按行输出方法

Python按行输出方法 Python作为一种快速易用的编程语言,广泛应用于数据分析、科学计算、web开发等领域。在Python编程过程中,输出数据是必不可少的环节。本文将介绍如何按行输出Python数据,为Python编程初学者提供参考。 什么是按行输出 按…

consul入门案例及配置热更新的实现

Consul的简单入门 当Producer启动时,会向Consul发送一个post请求,告诉Consul自己的ip和Port;Consul接收到producer的注册后,每个10S(默认),会向producer发送一个健康检查的请求,检验Producer是否健康当Consumer发送GET方式请求/api/address到Producer时,会先从Consul中拿到一个…

超越密码:网络安全认证的未来

你的物理现实的数字对应物正在惊人地增长。虽然肯定会有积极的结果,但随着互联网的发展,与之相关的风险也在迅速增加。在讨论网络安全风险管理时,首先想到的是密码。但当出现诈骗、网络钓鱼等威胁时,这还不够。 那么,…

chatgpt赋能python:Python爬虫:抓取数据的实用技巧

Python爬虫:抓取数据的实用技巧 如果您是一名数字营销从业者,那么您一定知道SEO的重要性。SEO是一项复杂的工作,但是其中包含了一个非常关键的步骤,就是通过爬虫从网站中抓取数据。Python是一个非常强大的工具,可以帮…

网络层:静态路由配置及其可能产生的路由环路问题

网络层:静态路由配置及其可能产生的路由环路问题 笔记来源: 湖科大教书匠:静态路由配置及其可能产生的路由环路问题 声明:该学习笔记来自湖科大教书匠,笔记仅做学习参考 静态路由配置是指用户或网络管理员使用路由器的…

chatgpt赋能python:Python实现直线拟合及求斜率

Python实现直线拟合及求斜率 什么是直线拟合 直线拟合是一种数据处理方法,将一组数据点拟合成一条直线的形式,以求出其中的规律性关系,从而更好地理解数据点之间的相关性。 直线拟合的应用场景 直线拟合在很多领域都有应用,例…