面向对象的三大特征之二:继承 --java学习笔记

什么是继承?

关键字extends,用这个关键字,可以让一个类和另一个类建立起父子关系

  • 继承的特点:子类能继承父类的非私有成员(成员变量、成员方法)
  • 继承后对象的创建:子类的对象时由子类、父类共同完成的
     

代码演示:

public class A {public int i;   //公开变量和方法public void print1(){System.out.println("print1");}private int j;  //私有变量和方法private void print2(){System.out.println("print2");}
}

 

java中的继承指的是能否直接使用,不能继承=不能直接使用≠子类没有这个变量,所以若子类想访问父类的私有成员,则需要父类写好get,set方法,私有方法同理

public class Test {public static void main(String[] args) {B b = new B();b.setJ(1);System.out.println(b.getJ());}
}

  • 子类的对象是由父类和子类俩张设计图设计出来的
  • 继承就是用extends关键字让一个类和另一个类建立起一种父子关系
  • 带继承关系的类创建的对象可以直接访问子类和父类中的公开成员变量和成员方法

使用继承有什麽好处? 

  • 减少重复代码的编写,提高代码复用性

就像提公因式,把多个类里面重复的代码提取到一个父类里面,然后其它类继承父类就可以直接使用这些重复代码,不需要再重新编写 

单继承

  • java中的类是单继承的(只能有一个父类),不支持多继承,但是支持多层继承
  • 多层继承:比如b继承了a类,c继承了b类,这就叫多层继承,java是支持多层继承的

假如多继承,俩个父类有同名变量或方法,就不知道该去使用谁的了 

Object类

Object类是所有类的老祖宗,我们写的任何一个类其实都是Object的子类或子孙类

所以其实只创建一个类,里面不写任何方法,但是通过这个类创建的对象也会有一些默认就有的方法,这些方法就是继承Object类

那么,既然不支持多继承,写新类的时候继承了一个类是不是就不会继承Object类了?当然不,即使信类没有继承Object类,父类也会继承,即使父类也没有继承,爷类也会继承,一直网上追溯,还是会继承到Object类的

方法重写

什麽是方法重写?

当子类觉得父类中某个方法不好用,或者无法满足自己的需求时,子类可以重写一个方法名称、参数列表一样的方法,去覆盖父类这个方法,这就是方法重写

重写后,方法的访问,java会遵循就近原则

方法重写的注意事项

  • 重写小技巧:使用Override注解,他可以指定java编译器,检查我们方法重写的格式是否正确,
  • 代码可读性也会更好子类重写父类方法时,访问权限必须大于或者等于父类该方法的权限( public> protected> 缺省 )。
  • 重写的方法返回值类型,必须与被重写方法的返回值类型一样,或者范围更小。
  • 私有方法、静态方法不能被重写,如果重写会报错的。

Override注解,严格要求重写方法格式:

 

 方法重写常见应用场景

重写toString方法

toString方法是Object类里面的方法,当直接输出变量的时候就会默认调用toString方法,toString方法默认是输出该对象地址,重写toString方法就可以改变直接输出对象时的内容

代码演示:

重写toString:

public class Student {@Overridepublic String toString(){   //重写toStringreturn "大家好,我是Student";}
}

Test:

public class Test {public static void main(String[] args) {Student s = new Student();  //定义对象System.out.println(s);  //直接输出对象}
}

运行结果:

子类访问其它成员

  • 在子类方法中访问其它成员(成员变量、成员方法),是依照就近原则

什麽是就近原则?

顾名思义,就是谁离得近访问谁:局部变量 > 子类成员变量 > 父类成员变量

那么如果要在局部变量、子类成员变量、父类成员变量皆同名的情况下去访问子类成员变量和父类成员变量该怎麽做?

该情况下:

  • 想访问成员变量:this.子类成员变量名
  • 想访问父类成员变量:super.父类成员变量名 

关于成员方法依旧是就近原则:重写成员方法 > 父类成员方法

如果坚持想访问父类方法:super.父类方法名 

子类构造器的特点

  • 子类的全部构造器,都会先调用父类的构造器,再执行自己

代码演示:

class a{public a(){System.out.println("父类a无参构造器执行");}
}class b extends a{public b(){System.out.println("子类b无参构造器执行");}
}public class Test {public static void main(String[] args) {b b1 = new b();}
}

 运行结果:

构造器不管写不写都会默认存在一句super();//调用父类无参构造器

 子类构造器为什么要调用父类构造器?

因为使用了继承,子类使用了俩个类的设计图来设计,也就是说子类可能有一些成员变量被拆分到父类里面,因此需要调用父类构造器把父类里面的成员变量先进行赋值

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

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

相关文章

杨中科 ASP.NET Core 中的依赖注入的使用

ASP.NET CORE中服务注入的地方 1、在ASP.NET Core项目中一般不需要自己创建ServiceCollection、IServiceProvider。在Program.cs的builder.Build()之前向builderServices中注入 2、在Controller中可以通过构造方法注入服 务。 3、演示 新建一个calculator类 注入 新建TestC…

linux环境安装docker

一、Docker是什么? 当我们开发一个应用程序时,通常需要配置和安装各种软件、库和依赖项。而这些环境配置可能会因为不同的操作系统或版本而存在差异,导致应用在不同环境中运行出现问题。 Docker就像是一个集装箱,可以将应用程序及其所有依…

HTTP 3xx状态码:重定向的场景与区别

HTTP 状态码是服务器响应请求时传递给客户端的重要信息。3xx 系列的状态码主要与重定向有关,用于指示请求的资源已被移动到不同的位置,需要采取不同的操作来访问。 一、301 Moved Permanently 定义: 服务器表明请求的资源已永久移动到一个新…

读元宇宙改变一切笔记07_硬件与互操作性(上)

1. 元宇宙的头号入口 1.1. 元宇宙最令人兴奋的地方在于,我们可以借此开发用来访问、渲染和操纵它的新设备 1.1.1. App Newton于1993年发布,是世界上第一款掌上电脑 1.2. 功能超强大又轻巧的AR和沉浸式VR头显 1.2.1.…

让企业的招投标文件、生产工艺、流程配方、研发成果、公司计划、员工信息、客户信息等核心数据更安全。

PC端访问地址1:www.drhchina.com PC端访问地址2: https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 全方位立体式防护  让数据泄密无处遁形 信息防泄漏是一项系统的整体部署工程,加密监控已成为多数企事业单…

RPA财务机器人在厦门市海沧医院财务管理流程优化汇总的应用RPA全球生态 2024-01-05 17:27 发表于河北

目前国内外研究人员对于RPA机器人在财务管理流程优化领域中的应用研究层出不穷,但现有研究成果主要集中在财务业务单一领域,缺乏财务管理整体流程一体化管控的研究。RPA机器人的功能绝非单一的财务业务处理,无论从自身技术发展,或…

anoconda 安装报错

表现形式:Output folder: D:\anoconda\Lib Extract: _nsis.py Extract: _system_path.py Output folder: D:\anoconda........................ 解决办法: 网址:Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Sour…

C语言实现俄罗斯方块游戏程序设计【附源码】

目录 一、前言 二、需求分析 2.1 产品需求概述 2.1.1 功能简介 2.1.2 运行环境 2.2 功能需求 2.2.1 绘制地图 2.2.2 生成随机方块 2.2.3 按键响应 2.2.4 预览方块 2.2.5 分数累加 三、概要设计 3.1 系统体系结构图 3.2 模块描述 四、详细设计 4.1 系统主要函数…

mysql进阶-重构表

目录 1. 原因 2. 如何重构表呢? 2.1 命令1: 2.2 命令2: 2.3 命令3: 1. 原因 正常的业务开发,为什么需要重构表呢? 原因1:某张表存在大量的新增和删除操作,导致表经历过大量的…

4.MapReduce 序列化

目录 概述序列化序列化反序例化java自带的两种Serializable非Serializable hadoop序例化实践 分片/InputFormat & InputSplit日志 结束 概述 序列化是分布式计算中很重要的一环境,好的序列化方式,可以大大减少分布式计算中,网络传输的数…

《向量数据库指南》让「引用」为 RAG 机器人回答增加可信度

在之前的文章中,我们已经介绍了如何用 Milvus 向量数据库以及 LlamaIndex 搭建基础的聊天机器人《Chat Towards Data Science |如何用个人数据知识库构建 RAG 聊天机器人?》《书接上回,如何用 LlamaIndex 搭建聊天机器人&#xff…

FlinkCDC的分析和应用代码

前言:原本想讲如何基于Flink实现定制化计算引擎的开发,并以FlinkCDC为例介绍;发现这两个在表达上不知以谁为主,所以先分析FlinkCDC的应用场景和技术实现原理,下一篇再去分析Flink能在哪些方面,做定制化计算…

个人网站制作 Part 4 添加响应式设计 | Web开发项目

文章目录 👩‍💻 基础Web开发练手项目系列:个人网站制作🚀 添加响应式设计🔨移动优先的响应式样式🔧步骤 1: 添加媒体查询 🔨图片和布局调整🔧步骤 2: 使用响应式图片🔧步…

vue3-计算属性

计算属性 模板中的表达式虽然方便&#xff0c;但也只能用来做简单的操作。如果在模板中写太多逻辑&#xff0c;会让模板变得臃肿&#xff0c;难以维护。 根据作者今年是否看过书展示不同信息 <script lang"ts" setup> import { ref, reactive } from "…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《与新能源互补和独立参加多级市场的抽蓄电站容量分配策略》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 这个标题涉及到抽蓄电站在能源系统中的角色&#xff0c;特别是在多级市场中的参与&#xff0c;并强调了新能源的互补性以及抽蓄电站的独立性。下面我将…

Spring Boot 整合支付宝实现在线支付方案(沙箱环境)

文章目录 1.理解沙箱环境2.沙箱环境接入准备2.1 访问开发者控制台2.2 获取重要信息2.3 处理秘钥 3.接入支付宝支付的流程4.实现支付4.1 添加 SDK 依赖4.2 创建配置类4.3 支付宝订单管理接口实现流程4.4 支付宝支付接口实现流程 5.支付宝支付功能演示7.总结 TIP&#xff1a;对于…

网络协议与攻击模拟_04ICMP协议与ICMP重定向

ICMP协议是网络层协议&#xff0c; 利用ICMP协议可以实现网络中监听服务和拒绝服务&#xff0c;如 ICMP重定向的攻击。 一、ICMP基本概念 1、ICMP协议 ICMP是Internet控制报文协议&#xff0c;用于在IP主机、路由器之间传递控制消息&#xff0c;控制消息指网络通不通、主机是…

Git LFS 大文件存储

Git 碰到大文件的困境 Git 是业界流行的分布式版本控制工具&#xff0c;本地仓库与远端仓库同样保存了全量的文件和变更历史&#xff0c;这样让代码协作变得简单和高效。但也正因为如此&#xff0c;Git针对大型文件&#xff08;例如图片、视频或其他二进制文件&#xff09;的版…

序章 熟悉战场篇—了解vue的基本操作

了解vue 的基本目录&#xff1a; dist 是打包后存放的目录(后续可以改)node_modules 是依赖包public 是静态index页面src 是存放文件的目录assets 是存放静态资源的目录components 是存放组件的目录views 是存放页面文件的目录&#xff08;没有views 自己新建一个&#xff09;A…

Jetpack Compose -> 声明式UI Modifier

前言 本章主要介绍下 Compose 的声明式 UI 以及初级写法&#xff1b; 什么是声明式UI 传统UI 传统 UI 方式来声明UI <androidx.appcompat.widget.LinearLayoutCompat android:layout_width"match_parent" android:layout_height"match_parent&quo…