Java初识继承

news2024/11/25 22:34:26

继承

文章目录

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

概念:在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中没有多继承,只能单继承,但是可以用实现接口的方式进行“多继承”。

继承中变量的访问特点

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

继承中方法的访问特点

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

继承的优缺点

优点:

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

缺点:

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

缺点:

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

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

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

相关文章

Linux进程——Linux进程与进程优先级

前言:在上一篇了解完一部分常见的进程状态后,我们先来把剩下的进程状态了解一下,再来进入进程优先级的学习! 如果对前面Linux进程不太熟悉可以先阅读: Linux进程 本篇主要内容: 僵尸进程和孤儿进程 Linux进…

63-HDMI转VGA电路设计

视频链接 HDMI转VGA电路设计01_哔哩哔哩_bilibili HDMI转VGA电路设计 HDMI电路设计(参考第13课) VGA电路设计(参考第15课) DP转VGA电路设计(参考第75课) 1、HDMI转VGA转换器 2、HDMI转VGA简介 1、解…

融知财经:期货风险有多大,期货风险进行控制的方法

期货价格变化远大于股票市场,其风险也大于股票市场,当然其预期收益机会相对较高,因此期货更适合激进型投资者。在期货投资市场中,除了市场外的常见风险外,转型期投资者的投机心理和杠杆效应会增加期货的交易风险&#…

获取波形极值与间距并显示

获取并显示波形的极值与极值间距 1、流程 1、通过signal.find_peaks获取极大值 2、获取极大值下标 3、获取极大值对应的值 4、获取极大值的下标间距(就是隔多远有一个极大值) 5、获取极大值间距的标准差、方差、均值、最大值 6、图形展示波形图并标记极大值2、效果图 3、示…

铜价飙升,慧能泰HUSB332F带你狂飙

铜价,近期涨的很飘,涨到怀疑人生。继黄金后,铜成了另一个疯涨的明星!作为电线电缆生产不可或缺的原材料,铜的身价暴涨直接拉响了成本警报,压缩了企业的利润空间。众多电线电缆制造商面临着严峻的挑战与考验…

嵌入式学习<1>:建立工程、GPIO

嵌入式学习_part1 本部分笔记用于学习记录,笔记源头 >>b站江科大_STM32入门教程 建立工程、GPIO 开发环境:keil MDK、STM32F103C8T6 1 )建立工程 (1)基于寄存器开发、基于标准库 或者 基于HAL库开发; &…

【Python】字典题

题目:输入一段文本,统计每个字符的个数 in_inputinput(“输入:”) dic{} for char in in_input: if char in dic: dic[char]1 # 字典添加键值对的方法,给字典给键和值的方法 else: dic[char]1 print(dic) for key,value in dic.i…

Elastic 通过 AI 驱动的安全分析改变 SIEM 游戏

作者:Santosh Krishnan, Jennifer Ellard 借助由搜索 AI 提供支持的新攻击发现功能,优先考虑攻击,而不是警报。 传统的安全信息与事件管理系统(SIEM)在很大程度上依赖屏幕背后的人类才能取得成功。警报、仪表盘、威胁…

DCEP数字人民币:中国法定区块链中数字货币

一、背景 作为全球第二大经济体,中国在数字货币领域的发展一直备受关注。近年来,中国政府积极推动数字货币的研究和试点工作,逐步开放数字货币交易试点,并计划推出中国唯一合法数字货币——数字人民币(RMB Coin&#…

tcping的安装,ping和tcping的区别

ping和tcping的区别 功能不同: Ping:Ping是一种基于ICMP协议的网络工具,用于测试主机之间的连通性。它发送ICMP回显请求(Echo Request)到目标主机,并等待目标主机返回ICMP回显应答(Echo Reply…

【Unity】使用Resources.LoadAll读取文件的顺序问题

最近在做客户的一个项目,其中的一个模块使用到了照片,但是发现了一个很严重的问题。当你在使用Unity的时候,它竟然不按照顺序读取?这个机器人是不是逻辑有问题?如下图: 名字脱敏了哈。。。 照片比较多&…

订单超时自动取消的实践方案

1、定时任务方案 方案流程: 每隔 30 秒查询数据库,取出最近的 N 条未支付的订单。 遍历查询出来的订单列表,判断当前时间减去订单的创建时间是否超过了支付超时时间,如果超时则对该订单执行取消操作。 定时任务方案工程实现相…

DAPP开发:揭秘DAPP软件开发的秘密

随着区块链技术的飞速发展,DAPP(去中心化应用)的开发逐渐成为了一个热门话题。在本文中,我们将探讨如何从零开始开发DAPP软件,并深入思考DAPP开发中的关键问题。 一、了解DAPP开发的基础知识 在开始开发DAPP之前&…

Web3:下一代互联网的科技进化

随着科技的不断演进,互联网已经成为了我们生活中不可或缺的一部分。而在Web3时代,我们将会见证互联网进化的下一个阶段。本文将探讨Web3作为下一代互联网的科技进化,以及它所带来的重要变革和影响。 传统互联网的局限性 传统互联网存在诸多…

绘画作品3d数字云展厅提升大众的艺术鉴赏和欣赏能力

3D虚拟展厅作为未来艺术的展示途径,正逐渐成为文化创意产业蓬勃发展的重要引擎。这一创新形式不仅打破了传统艺术展览的局限性,更以其独特的魅力吸引着全球观众的目光。 3D虚拟艺术品展厅以其独特的魅力,助力提升大众的艺术鉴赏和欣赏能力。观…

开发组合php+mysql 人才招聘小程序源码搭建 招聘平台系统源码+详细图文搭建部署教程

随着互联网的快速发展,传统的招聘方式已经不能满足企业和求职者的需求。为了提高招聘效率,降低招聘成本,越来越多的人开始关注人才招聘小程序、在线招聘平台。分享一个人才招聘小程序源码及搭建,让招聘更加高效便捷。系统是运营级…

Android getevent命令详细分析

在调试Android 的输入事件时,经常使用 “getevent -lrt” 命令,来确认驱动上报数据是否正常。从源码的角度来详细的分析一下getevent 这个程序。 首先用ls命令来看一下getevent lrwxr-xr-x 1 root shell 7 2023-11-20 10:08 system/bin/getevent -> …

视频号小店是普通人的机会吗?看完你就明白了!

大家好,我是电商小V 视频号小店是普通人的机会吗?我可以很确定的说:视频号小店就是普通人的机会,并且是很大的机会, 首先就是视频号小店这个项目还没有自然流量的入口,是一个还没有完全开放私域电商的平台&…

python+flask+ldap3搭建简易版IDaaS系统(前端站点)

Python工具开源专栏 Py0006 pythonflaskldap3搭建简易版IDaaS系统(前端站点) Python工具开源专栏前言目录结构前端网站的部分演示首页查询数据数据同步数据关联查询系统日志 完整代码已在GitHub上开源 前言 pythonflaskldap3搭建简易版IDaaS系统的前端站…

XSS漏洞---XSS-labs通关教程

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 Level-1 过滤源码&#xff1a;无 pyload&#xff1a; name<script>alert(1)</script> Level-2 过滤源码&#xff1a;利用转译函数将特殊字符转译为实体字符 $str $_GET["…