Java初识继承

继承

文章目录

  • 继承
    • 为什么需要继承
    • 继承中变量的访问特点
    • 继承中方法的访问特点
    • 继承的优缺点

概念:在Java中,继承是面向对象编程的一个基本特性。它允许我们定义一个新类,它从另一个已经存在的类继承其属性和方法。被继承的类称为父类或超类,新定义的类称为子类。

在这里插入图片描述

为什么需要继承

继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类,在父类中定义这些相同的属性和方法,所有的子类不需要重新定义这些属性和方法,只需要通过extends来声明继承父类即可。
在这里插入图片描述

上述图片中,学生类拥有属性:姓名,年龄,性别,学号。拥有方法:吃饭,睡觉,学习

​ 教师类拥有属性:姓名,年龄,性别,工号。拥有方法:吃饭,睡觉,教书

为了使代码简化,我们将相同的属性提取出来,形成一个单独的类(父类,也称为基类),让学生类和教师类继承我们所提取出来的类,简化代码的冗余。

代码实现:

class Person{
   private String name;
   private char sex;
   private int age;

   public String getName() {
        return name;
   }

   public void setName(String name) {
        this.name = name;
   }

   public char getSex() {
        return sex;
   }

   public void setSex(char sex) {
        this.sex = sex;
   }

   public int getAge() {
        return age;
   }

   public void setAge(int age) {
        this.age = age;
   }

   public void eat(){
       System.out.println(this.name+"吃饭");
   }
   public void sleep(){
       System.out.println(this.name+"睡觉");
   }
}
class Student extends Person{
    private int stuNum;

    public int getStuNum() {
        return stuNum;
    }

    public void setStuNum(int stuNum) {
        this.stuNum = stuNum;
    }

    public void study(){
        System.out.println("学习");
    }
}

class Teacher extends Person{
   private int teaNum;

    public int getTeaNum() {
        return teaNum;
    }

    public void setTeaNum(int teaNum) {
        this.teaNum = teaNum;
    }

    public void teach(){
        System.out.println("教书");
    }
}
public class Test01{
    public static void main(String[] args){
        Student student = new Student();
        student.setName("胡歌");
        student.setAge(41);
        student.setSex('男');
        student.setStuNum(123123);
        Teacher teacher = new Teacher();
        teacher.setName("吴彦祖");
        teacher.setAge(44);
        teacher.setSex('男');
        teacher.setTeaNum(456456);
        System.out.println(student.getName()+"--"+student.getSex()+"--"+student.getAge()+"--"+student.getStuNum());
        System.out.println(teacher.getName()+"--"+teacher.getSex()+"--"+teacher.getAge()+"--"+teacher.getTeaNum());
    }
}

运行结果:

在这里插入图片描述

注意:

  • private修饰的内客,子类实际上也可继承只是因为封装的特性阻碍了直击调用,但是提供了间接调用的方法,可以间接调用。
  • java中没有多继承,只能单继承,但是可以用实现接口的方式进行“多继承”。

继承中变量的访问特点

在子类方法中访问一个变量,最先在子类局部范围找,如果没有就在子类成员范围找,最后在父类成员范围找,如果都没有就报错。

继承中方法的访问特点

通过子类对象访问一个方法,先子类成员范围找,如果找不到就在父类成员范围找,如果都没有就报错。

继承的优缺点

优点:

  • 代码重用:可以通过继承现有类的属性和行为,避免重复编写代码,提高代码复用性。
  • 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。

缺点:

  • 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
    现有类的属性和行为,避免重复编写代码,提高代码复用性。
  • 可扩展性:可以通过添加新的方法和属性来扩展现有类的功能,使代码更加灵活。

缺点:

  • 继承具有较强的耦合性:子类和父类之间有较强的关联性,一旦父类发生变化,子类也需要相应地修改,增加了维护的难度。
  • 继承层次过深可能导致复杂性增加:如果继承层次过深,可能导致代码结构复杂,难以理解和维护。

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

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

相关文章

JavaScript百炼成仙自学笔记——15

var num "0.01"; var num_arr num.split("."); var num_arr2 num_arr[1]; 0.10.20.3000000000000004 1.001*10001000.9999999999999; 小数运算丢失精度问题的解决办法: 前两种都有缺陷(第一种丢失精度&#xff0c…

(论文阅读-优化器)EFFICIENCY IN THE COLUMBIA DATABASE QUERY OPTIMIZER

目录 ABSTRACT Chapter 1. Introduction Chapter 2. Terminology 2.1 查询优化器 2.2 逻辑算子和查询树 2.3 物理算子和执行计划 2.4 Groups 2.3 搜索空间 2.6 规则 Chapter 3. Related Work 3.1 System R和Starburst优化器 3.2 Exodus和Volcano优化生成器 3.3 Cas…

PyCharm安装详细教程

PyCharm安装详细教程 PyCharm简介及其下载网站 PyCharm是由JetBrains打造的一款Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。PyCharm提供了代码编辑、调试、语法高亮…

最常用的AI工具

在日常工作生活中,我试用了几十种AI人工智能工具,下面我来推荐下我最常使用,也是最方便快捷的AI工具。 1百度文心一言 文心一言是一个综合性的大语言模型,整合了很多优秀的提示词,尤其是文心4.0大模型,在中…

做私域,朋友圈到底该怎么发?

说到做私域,很多人都会问:朋友圈该怎么发?相信大家的朋友圈早已经被各种广告攻占了,很多也都被大家屏蔽了。但如果要做私域,单纯发广告是行不通的,可是现在依然有很多人,认为做私域就是狂发朋友…

网络基础(1)网络编程套接字TCP,守护进程化

TCP协议 下面我们来学习一下TCP套接字的使用。 也就是使用一下基本的接口。首先TCP套接字的使用和UDP套接字的使用是大同小异的,但是多了一些步骤。 这里回顾一下:UDP是不可靠的,无连接的协议。而TCP则是可靠的,面向连接的协议…

护眼台灯品牌排行前十名有哪些?最新护眼台灯品牌排行前十名分享

在近几年,一个引人关注的健康现象是青少年近视问题的日益加剧。统计数字显示,近视的发病率不断攀升,令人忧心地发现,许多才刚步入小学一年级的孩子们,便已佩戴起了厚重的眼镜。其中最主要的原因就在于学习过程对数码设…

高实时、高可靠的微内核操作系统——鸿道Intewell

近年来,我国不断推进工业转型升级,力求实现从传统工业大国向现代工业强国的跨越。想要在新一轮科技革命中“超车”,需要从多个维度进行深度布局和全面发力。 ——科技创新是核心驱动力 积极推动工业结构的优化和升级,通过发展新…

鸿蒙OpenHarmony南向:【Hi3516标准系统入门(IDE方式)】

Hi3516标准系统入门(IDE方式) 注意: 从3.2版本起,标准系统不再针对Hi3516DV300进行适配验证,建议您使用RK3568进行标准系统的设备开发。 如您仍然需要使用Hi3516DV300进行标准系统相关开发操作,则可能会出现…

Windows设置Redis为开机自启动

前言 Redis作为当前最常用的当前缓存技术,基本上Web应用中都有使用。所以,每次我们在本地启动项目前,都必须将Redis服务端启动。但是,每次都要去启动Redis就很麻烦,有没有办法做到开机自动启动Redis呢?这当…

leetCode69. x 的平方根

leetCode69. x 的平方根 题目思路 常见的二分法模板&#xff08;背过就行&#xff0c;模板而已&#xff09; // 区间[L,R]被划分为[L,mid]和[mid 1, R]时使用这个模板 int bsearch_1(int l, int r){while(l < r){int mid l r >> 1;if(check(mid)) r mid; //che…

CoPilot 产品体验:提升 OpenNJet 的控制管理和服务提供能力

文章目录 前言系统架构介绍CoPilot 配置CoPilot 插件规范 体验 CoPilot 实例CoPilot: Broker 实例CoPilot: Ctrl 实例 开发其他语言编写的 CoPilot目标主要思路具体实现执行 go 程序代码 功能扩展总结 前言 CoPilot 是 OpenNJet 的一个重要组成部分&#xff0c;它在 Master-Wo…

我独自升级崛起怎么下载 我独自升级崛起下载教程来了

《我独自升级&#xff1a;崛起》作为一款炙手可热的游戏&#xff0c;其非凡的品质迅速聚拢了大量玩家的目光&#xff0c;就如同磁铁吸引铁屑一般&#xff0c;展现了优质游戏所固有的强大吸引力。在这款游戏中&#xff0c;每位玩家都能化身成为拥有超凡能力的英雄&#xff0c;体…

物联网技术、测试要点和测试标准

物联网定义 物联网&#xff1a;利用嵌入式电子设备、微芯片等连接车辆、家电、医疗设备&#xff0c;以收集和交换不同类型的数据&#xff0c;被称为物联网。借助物联网&#xff0c;用户能够远程控制设备&#xff0c;可以实现不同设备的互联。在现实生活中物联网开始有越来越多…

使用开放式用户通信连接两台西门子S71200plc

步骤1.在项目中创建两台PLC。 步骤2.分别设置两个PLC的参数。 plc1 plc2 步骤3.对两个plc进行组态 步骤4.在plc1和plc2中各自创建DB块&#xff0c;用于通信。 须在块的属性中取消优化块的访问选项。 plc1 plc2 步骤5.往plc1的main块中编写代码。 步骤6.往plc2的main块中编写…

Python爬虫--Urllib基础

1. urlretrieve Urllib 库也是类似 request 库&#xff0c;用来解析html的 首先讲 urlretrieve 子模块 这个模块的作用是将网页下载到本地 语法&#xff1a; urlretrieve(网址,本地地址) 例如&#xff1a; 这样就可以了&#xff0c;他会将百度网页下载到本地D盘下&#x…

【iOS】——浅析CALayer

文章目录 一、CALayer介绍二、UIview与CALayer1.区别2.联系 三、CALayer的使用1.初始化方法2.常用属性 四.CALayer坐标系1.position属性和anchorPoint属性2.position和anchorPoint的关系3.position、anchorPoint和frame的关系 五、CALayerDelegate六、CALayer绘图机制1.绘图流程…

AGI|基于LangChain实现的三种高级RAG检索方法

一、前言 RAG(Retrieval-Augmented Generation)检索增强生成&#xff0c;是现如今基于企业私域知识的问答应用所使用的主流技术之一。相较于重新训练基于私域知识的大模型来说&#xff0c;RAG没有额外的预训练成本&#xff0c;且回答效果与之相当。 但在实际应用场景中&#xf…

容器Docker:轻量级虚拟化技术解析

引言 随着云计算和虚拟化技术的飞速发展&#xff0c;容器技术以其轻量级、高效、可移植的特性&#xff0c;逐渐成为了软件开发和部署的新宠。在众多容器技术中&#xff0c;Docker以其简单易用、功能强大的特点&#xff0c;赢得了广泛的关注和应用。本文将全面介绍Docker的基本概…