Java基础语法之继承

为什么要继承

会发现,狗和猫只有叫声不同,因为它们都是动物,会有相同的属性和行为,所以它们可以继承animla类

如何继承

用到extends关键字

这样就会简化好多

注意

1.Animal称为父类/超类/基类;dog,cat称为子类/派生类

2.继承父类后,必须要添加自己的成员,否则没必要继承

3.继承的作用:实现代码的复用

父类成员的访问

父类成员变量与子类不同名时

a=10;b=20;都是访问从父类继承下来的成员

c=30是访问子类自己的

父类与子类成员变量同名时

此时a=10是访问的自己的a

父类与子类成员方法同名时

总结

对父类成员的访问遵循就近原则,当父类子类的成员变量或方法同名时,就会访问子类的。

但如果成员名相同时,我就想访问父类的,该如何操作呢?

super关键字

作用:在子类中访问父类的成员

分割线上方都是Derived类内部的方法打印的,分割线下方是main方法打印的,这是因为引用a的类型是Derived,所以遵循就近原则,找到了子类中的a

注意

1.同this关键字一样,super只能在非静态方法中使用,所以在main方法中不能用到super和this

2.但是,静态的成员变量和方法也可以访问,只不过不推荐,静态的成员变量和方法一般通过类名来访问

子类构造方法

父子父子,先有父再有子,即:子类对象构造前,要先调用基类的构造方法。

我们自己没有给子类写构造方法时,编译器会默认添加上如下的构造方法

看似什么都没有,实际上这个方法的第一句是隐藏的super();这就是调用父类的构造方法,如下

当实例化son这个对象时,就会调用子类的构造方法,同时会在第一条语句执行隐藏的父类构造方法

构造方法的重载

注意看,下面的第四行代码报错了,这是为什么?

因为在父类中,我们重写了一个带参数的构造方法,所以编译器就不会默认提供不带参数的构造方法,同时,在子类的构造方法中隐藏的super()这样的调用语句就不起作用了

那如何解决?法一:在父类中写一个不带参数的构造方法。法二:在子类的构造方法中调用父类带参数的构造方法(注意,这个调用语句必须是在第一行)。如下俩种解决方案

用this在构造方法中调用其他构造方法

这个结果是什么呢?

注意,第一个被调用的子类构造方法的第一句会默认添加super(),而接下来调用的子类构造方法就不会再添加super(),因为构造方法对于一个对象只执行一次

再谈有初始化作用的代码块

没有继承关系时

静态代码块先执行,然后是实例代码块,最后是构造方法

静态代码块是在类加载时执行,不管有没有对象,不管有几个对象,只要这个类被提到了,他就执行且只执行一次

当有了对象的创建时,实例代码块才执行,最后是构造方法

有继承关系时

静态代码块优先执行,然后是父类的实例(构造方法不是静态的,也可以看作实例),最后是子类的实例

这是因为静态代码块在类加载时就执行,当编译器遇到Derived时,它会先找到父类先加载父类,然后加载子类,最后才开始创建对象,创建时还是遵循父类优先原则,先通过实例代码块和构造方法将父类中的值初始化以供子类使用,最后再对子类对象初始化。

父类中不同访问权限的成员在子类中的可见性

当父类和子类在同一个包中时

只有a是不可以被直接访问的,

当父类和子类在不同包中时

注意要用import导入父类所在的包

此时a和b都不可见,因为b是默认权限,只能在同一个包当中访问,c是可见的,因为protected修饰后,在同一个包中可以用,在不同包的子类中也可以用

final关键字

final关键字可以用来修饰变量,成员方法以及类

1.修饰变量,表示常量,不可以修改,不论是局部变量还是成员变量,都一样不可修改

2.修饰类,表示此类不能被继承

3.修饰方法,表示此方法不能被重写

继承与组合

继承是is-a的关系,比如狗是动物

组合是has-a的关系,比如汽车有什么

下面是一个学校类,里面有学生类,老师类,员工类

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

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

相关文章

linux下sys目录与proc目录的作用

sys目录作用 在Linux系统中,/sys目录是一个特殊的虚拟文件系统(sysfs),用于提供对内核和设备的运行时信息的访问。它是在内核中运行的驱动程序和子系统的接口,可以用于获取和配置系统的硬件和内核信息。 以下是/sys目…

提升测试工具开发的思考

本文针对测试部效率提升测试工具开发、管理、维护暴露出来的问题的一些思考以及一些个人改进观点。 写在前面 本文提到的效率提升测试工具不是指的部门中固有的自动化测试工具,这里提到的测试工具统一指测试人员在工作之余自主开发用于期望替代重复、繁琐、耗时的手…

sylar高性能服务器-配置(P12-p14)内容记录

文章目录 p12:复杂类型解析一、方法函数二、结果展示 p13:复杂类型解析完善一、方法函数二、结果展示 p14:自定义类型解析一、方法函数二、小结 p12:复杂类型解析 ​ 本节内容主要针对完了配置类中对于复杂类型的转换。之前只实现…

最近面试了一位5年的测试,一问三不知,还反怼我...

最近看了很多简历,很多候选人年限不小,但是做的都是一些非常传统的项目,想着也不能通过简历就直接否定一个人,何况现在大环境越来 越难,大家找工作也不容易,于是就打算见一见。 在沟通中发现,由…

Linux高级管理--安装MySQL数据库系统

MySQL服务基础 MySQL.是一个真正的多线程、多用户的SQL数据库服务,凭借其高性能、高可靠和易于使 用的特性,成为服务器领域中最受欢迎的开源数据库系统。在2008年以前,MySOL项目由MySQL AB公司进行开发,发布和支持,之后…

产品表结构分析

一个项目之中,会有很多数据,众多数据之间也存在这各种关系,如何依据这些关系设计出更符合实际且适合的表及之间的关联关系也是我们所必须学习的 一、常见部门表结构分析 几乎所有框架里面都有一张部门表,我们先来看一下他的结构&…

逆向思考 C. Fence Painting

Problem - 1481C - Codeforces 思路:逆序考虑,因为每一块木板都是被最后一次粉刷所决定的。 从后往前开始,对于 c i c_i ci​来说, 如果这个颜色还有没有涂的木板,那么涂到其中一个木板即可如果这个颜色下没有未涂的…

使用selenium的edge浏览器登录某为

互联网上基本都是某哥的用法,其实edge和某哥的用法是一样的就有一下参数不一样。 一、运行环境 Python:3.7 Selenium:4.11.2 Edge:版本 120.0.2210.61 (正式版本) (64 位) 二、执行代码 from time import sleepfrom selenium…

GB28181学习(十八)——图像抓拍

前言 本文主要介绍图像抓拍功能,通过自研的sip库(mysipsdk.dll)对接真实设备,使用http方式实现图像数据传输,最终达到图像抓拍与保存的目的。 基本要求 图像格式宜使用JPEG;图像分辨率宜采用与主码流相同…

【JMeter】使用nmon进行性能资源监控

一、前言 ​ 在工作中可能会遇到需要在压测的时候对Linux服务器进行性能资源监控的情况。这时可以用nmon来对服务器进行监控。 二、nmon的下载安装 1.查看系统信息 shell cat /etc/os-release结果为 shell PRETTY_NAME"Debian GNU/Linux 12 (bookworm)" NAME&qu…

动物姿态估计:微调 YOLOv8 姿态模型

动物姿态估计是计算机视觉的一个研究领域,是人工智能的一个子领域,专注于自动检测和分析图像或视频片段中动物的姿势和位置。目标是确定一种或多种动物的身体部位(例如头部、四肢和尾巴)的空间排列。这项技术具有广泛的应用&#…

【大数据】Hadoop生态未来发展的一些看法

大数据的起源 谷歌在2003到2006年间发表了三篇论文,《MapReduce: Simplified Data Processing on Large Clusters》,《Bigtable: A Distributed Storage System for Structured Data》和《The Google File System》介绍了Google如何对大规模数据进行存储…

MATLAB基础运算

矩阵和数字相乘 就是矩阵里面每个元素跟这个数字乘一遍,无论是点乘还是叉乘,对于这个都一样。 >> Aones(3) A 1 1 11 1 11 1 1 >> 10*A ans 10 10 1010 10 1010 10 10 矩阵和矩阵叉乘 能不能相…

什么是接口测试?如何做接口测试

接口测试是指对系统或应用程序接口进行测试,以验证接口的功能、可靠性、性能、安全性等方面的需求是否被满足。接口测试可以用于测试不同系统、模块、组件之间的交互和通信,包括 Web 接口、网络接口、数据库接口等。其重点是测试数据传输、数据格式、数据…

excel做预测的方法集合

一. LINEST函数 首先,一元线性回归的方程: y a bx 相应的,多元线性回归方程式: y a b1x1 b2x2 … bnxn 这里: y - 因变量即预测值x - 自变量a - 截距b - 斜率 LINEST的可以返回回归方程的 截距(a) 和 斜…

MySQL基础笔记

MySQL 1. SQL1.1 SQL-DDL语句1.1.1 数据库操作1.1.2 表操作 1.2 MySQL-DML语句1.3 MySQL-DQL语句1.3.1 基本查询1.3.2 条件查询1.3.3 聚合函数1.3.4 分组查询1.3.5 排序查询1.3.6 分页查询 1.4 MySQL-DCL语句1.4.1 管理用户1.4.2 权限控制 2. 函数2.1 字符串函数2.2 数值函数2.…

mybatis动态SQL-choose-when-otherwise

1、建库建表 create database mybatis-example; use mybatis-example; create table emp (empNo varchar(40),empName varchar(100),sal int,deptno varchar(10) ); insert into emp values(e001,张三,8000,d001); insert into emp values(e002,李四,9000,d001); insert into…

性能测试、负载测试、压力测试之间的差异!

1、什么是性能测试 性能测试是一种用于确定计算机、网络或设备速度的测试。它通过在不同的负载场景中传递不同的参数来检查系统组件的性能。 2、什么是负载测试 负载测试是在任何应用程序或网站上模拟实际用户负载的过程。它检查应用程序在正常和高负载期间的行为。当开发项目…

Gin之GORM 操作数据库(MySQL)

GORM 简单介绍 GORM 是 Golang 的一个 orm 框架。简单说,ORM 就是通过实例对象的语法,完成关系型数据库的操作的技术,是"对象-关系映射"(Object/Relational Mapping) 的缩写。使用 ORM框架可以让我们更方便…

医保电子凭证在项目中的集成应用

随着医保电子凭证使用普及,医疗行业的各个场景都要求支持医保码一码通办,在此分享一下,在C#和js中集成医保电子凭证的demo 供有需要的小伙伴参考。 一、项目效果图 在c#中集成医保电子凭证效果 在js中集成医保电子凭证效果 二、主要代码 c#…