Java基础(六)——继承

news2024/11/28 20:49:38

个人简介

👀个人主页: 前端杂货铺
开源项目: rich-vue3 (基于 Vue3 + TS + Pinia + Element Plus + Spring全家桶 + MySQL)
🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展
📃个人状态: 研发工程师,现效力于中国工业软件事业
🚀人生格言: 积跬步至千里,积小流成江海
🥇推荐学习:🍖开源 rich-vue3 🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js实战 🍒Three.js

🌕个人推广:每篇文章最下方都有加入方式,旨在交流学习&资源分享,快加入进来吧

内容参考链接
Java基础(一)Hello World,8种数据类型,键盘录入
Java基础(二)数组,方法,方法重载
Java基础(三)类和对象、构造方法
Java基础(四)字符串、StringBuffer、StringBuilder、StringJoiner
Java基础(四)ArrayList

文章目录

    • 前言
    • 继承
      • Java 继承的特点
      • 方法重写
      • 继承中构造方法的访问特点
    • static
    • 总结

前言

大家好,这里是前端杂货铺。

本篇文章,我们主要学习 Java 中继承,并顺带认识一下 static。


继承

继承,可以让类和类之间产生子父的关系。我们可以把多个子类中重复的代码抽取到父类中,子类可以直接使用,减少代码冗余,提高代码复用性。

子类可以得到父类的属性和行为,子类可以使用。

子类可以在父类的基础上新增其他功能,使得子类更强大。

public class 子类 extends 父类 {}

Java 继承的特点

  • Java 只支持单继承,不支持多继承,但支持多层继承(A 继承父类 B,B 继承父类 C…)
  • Java 中所有的类都直接或间接继承于 Object 类
  • 子类只能访问父类中的非私有成员
  • 子类中 不能继承 父类中 非私有和私有的构造方法
  • 子类中 能继承 父类中 非私有和私有的成员变量(但私有不可用)
  • 子类中 能继承 父类中 虚方法表(非private、非static、非final修饰)中的成员方法,其余不能继承
  • 继承中成员变量访问特点:就近原则:先在局部位置找,本类成员位置找,父类成员位置找,逐级往上

方法重写

几个注意事项:

  • 重写方法的名称、形参列表必须与父类中的一致
  • 子类重写父类方法时,访问权限子类必须大于等于父类(空着不写 < protected < public)
  • 子类重写父类方法时,返回值类型子类必须小于等于父类
  • 只有被添加到虚方法表中的方法才能被重写
package com.javabasic.define;

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        student.lunch();
    }
}

class Person {
    public void eat() {
        System.out.println("父类-吃馒头");
    }

    public void drink() {
        System.out.println("父类-喝开水");
    }
}

class Student extends Person {
    public void lunch() {
        this.eat();
        this.drink();

        super.eat();
        super.drink();
    }

    @Override
    public void eat() {
        System.out.println("子类-吃辣条");
    }

    @Override
    public void drink() {
        System.out.println("子类-喝饮料");
    }
}

在这里插入图片描述


继承中构造方法的访问特点

  • 子类不能继承父类的构造方法,但是可以通过super调用
  • 子类构造方法的第一行,有个默认的super()
  • 默认先访问父类中无参的构造方法,再执行自己
  • 如果想要调用父类的有参构造方法,必须手动书写

Person.java

package com.javabasic.define;

public class Person {
    String name;
    int age;

    public Person() {
        System.out.println("父类的无参构造");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

Student.java

package com.javabasic.define;

public class Student extends Person {
    public Student() {
        super();
        System.out.println("子类的无参构造");
    }

    public Student(String name, int age) {
        super(name, age);
    }
}

Test.java

package com.javabasic.define;

public class Test {
    public static void main(String[] args) {
        // 调用无参构造,先走父,再走子
        Student student = new Student();

        // 间接调用父类的有参构造
        Student student2 = new Student("张三", 22);

        System.out.println(student2.name + ", " + student2.age);
    }
}

在这里插入图片描述


static

static 表示静态,是 Java 中的一个修饰符,可以修饰成员方法,成员变量。

被 static 修饰的成员变量,叫做静态变量。

  • 被该类所有对象共享
  • 不属于对象,属于类
  • 随着类的加载而加载,优先于对象存在

Student.java

package com.javabasic.define;

public class Student {
    private String name;
    private int age;
    public static String teacherName;

    public void show() {
        System.out.println(name + " " + age + " " + teacherName);
    }

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

Test.java

package com.javabasic.define;

public class Test {
    public static void main(String[] args) {
        Student.teacherName = "xx老师";
        Student student = new Student("前端杂货铺", 20);

        student.show();
    }
}

在这里插入图片描述


被 static 修饰的成员方法,叫做静态方法。

  • 多用在测试类和工具类中
  • Javabean 类中很少会用
  • 静态方法中没有 this 关键字
  • 静态方法只能访问静态
  • 非静态方法可以访问非静态方法和静态方法

下面,我们创建一个工具类 ArrayUtil.java,里面均为静态方法,用于处理一些数组数据。

ArrayUtil.java

package com.javabasic.define;

public class ArrayUtil {
    private ArrayUtil() {}

    public static String printArr(int[] arr) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");

        for (int i = 0; i < arr.length; i++) {
            if (i == arr.length - 1) {
                sb.append(arr[i]);
            } else {
                sb.append(arr[i]).append(", ");
            }
        }
        sb.append("]");

        return sb.toString();
    }

    public static double getAverage(double[] arr) {
        double sum = 0;
        for (int i = 0; i < arr.length; i++) {
           sum += arr[i];
        }

        return sum / arr.length;
    }
}

Test.java

package com.javabasic.define;

public class Test {
    public static void main(String[] args) {
        int[] arr1 = {1, 2, 3, 4, 5};
        String str = ArrayUtil.printArr(arr1);
        System.out.println(str);

        double[] scores = {1.0, 2.0, 3.0, 4.0, 5.0};
        double average = ArrayUtil.getAverage(scores);
        System.out.println(average);
    }
}

在这里插入图片描述


总结

本篇文章,我们学习了继承的相关内容,并认识了 static 的特性及使用场景…

好啦,本篇文章到这里就要和大家说再见啦,祝你这篇文章阅读愉快,你下篇文章的阅读愉快留着我下篇文章再祝!


参考资料:

  1. Java 基础(bilibili-黑马程序员)
  2. 菜鸟教程–Java

在这里插入图片描述


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

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

相关文章

Blazor SPA 的本质是什么以及服务器端渲染如何与 Blazor 的新 Web 应用程序配合使用

Blazor 通常被称为单页应用程序 (SPA) 框架。当我第一次开始使用 Blazor 时&#xff0c;我对 SPA 的含义、组件如何为 SPA 架构做出贡献以及所有这些如何与交互性联系在一起感到困惑。 今天&#xff0c;我将解答大家可能关心的三个问题&#xff1a; 什么是 SPA&#xff1f;了…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…

文心一言最常用的20条指令及指令说明,含增强指令

下面是20条文心一言的指令及其说明&#xff0c;每条指令尽量简洁明了&#xff0c;以便在有限的字数内提供尽可能多的信息。以下是这些指令及其说明&#xff1a; 1. 查询天气 指令&#xff1a;今天北京的天气怎么样&#xff1f;说明&#xff1a;此指令用于查询特定城市&#xf…

24西安电子科技大学经济与管理学院—考研录取情况

24西安电子科技大学—经理与管理学院—考研录取统计 01、经理与管理学院各个方向 02、24经济与管理近三年复试分数线对比 1、经管院24年院线相对于23年院线普遍下降2-15分&#xff0c;个别专业上涨4-10分。 2、经管院应用经济学2024年院线350分&#xff1b;管理科学与工程院线…

用kimi实现一键实体识别与关系抽取

实体识别与关系抽取是自然语言处理&#xff08;NLP&#xff09;中的两个重要任务&#xff0c;通常被视为知识图谱构建的基础技术。 实体识别&#xff08;Named Entity Recognition, NER&#xff09;&#xff1a; 实体识别的目标是从文本中识别出具有特定意义的实体&#xff0…

Java.lang.Thread类和Java的主线程

一.Java.lang.Thread类 支持多线程编程 常用方法 二.主线程 ◆Java程序启动时&#xff0c;一个线程立即随之启动&#xff0c;通常称之为程序的主线程 ◆main()方法即为主线程入口 ◆产生其他子线程的线程 ◆必须最后完成执行&#xff0c;因为它执行各种关闭动作 示例 使用…

Vben:表格的表头和表格的内容对不齐,以及解决方法

文章目录 一、问题描述二、解决方法 一、问题描述 基于Vue-Vbne-admin框架进行前端开发的时候&#xff0c;调用表格useTable函数实现表格之后&#xff0c;发现表格的表头和表格的内容对不齐。如下图所示。针对这种情况&#xff0c;本文记录了解决方法。 调用的模块如下&#x…

centos7部署mysql8.0

1.安装MySQL的话会和MariaDB的文件冲突&#xff0c;所以需要先卸载掉MariaDB。查看是否安装mariadb rpm -qa | grep mariadb 2. 卸载mariadb rpm -e --nodeps 查看到的文件名 3.下载MySQL安装包 MySQL官网下载地址: MySQL :: Download MySQL Community Serverhttps://dev.mys…

AE界面讲解

目录 菜单栏 快捷工具栏 项目窗口 合成窗口 选项面板 时间线面板 菜单栏 快捷工具栏 切换工具的方式&#xff1a;按住Alt键&#xff0c;点击要切换的工具选项&#xff0c;就可以快速切换同一个工具子菜单下的其他工具 项目窗口 用来存放项目的区域 合成窗口 用于预览视…

TEE RPMB的简介以及开发流程

思考: 如何开发一个TA? sdk又是什么?开发一个TA的流程是怎样的?How to do?有关TA的签名介绍TEE开发Secure driver介绍RPMB的简介以及开发流程共享内存的最大限制是什么?TA的栈内存/堆内存又有哪些限制TA都支持哪些密码学算法?TA都可以使用哪些存储接口?分别都存放在了哪…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十一)-git(3)

Git是目前最流行的版本控制系统之一&#xff0c;在现代软件开发中扮演着重要的角色。它能够有效地跟踪文件变化、协作开发&#xff0c;并存储项目的历史记录。本文的目的是向读者介绍Git的基本概念和工作原理&#xff0c;帮助初学者快速上手使用Git&#xff0c;并帮助有经验的开…

leetcode每日一题-3101 交替子数组计数

暴力遍历&#xff1a;看起来像是回溯,实际上就是递归 class Solution { private:long long _res 0; public:long long countAlternatingSubarrays(vector<int>& nums) {backtrack(nums, 0);return _res;}void backtrack(vector<int>& nums, long long st…

Threejs环境、透视相机、坐标系、光源

文章目录 如何引入threejsnpm方式script方式script module方式 基本流程与坐标摄像机Geometry(几何体)和Material(材质)光源 如何引入threejs 对于很多刚刚上手threejs的朋友&#xff0c;可能第一步引入threejs就出问题了&#xff0c; 明明已经导入了&#xff0c;就是这样问题…

(阿里云在线播放)基于SpringBoot+Vue前后端分离的在线教育平台项目

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

Apache Seata tcc 模块源码分析

本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 本文来自 Apache Seata官方文档&#xff0c;欢迎访问官网&#xff0c;查看更多深度文章。 一 .导读 spring 模块分析中讲到&#xff0c;Seata 的 spring 模块会对涉及到分布式业务的 b…

从4D CT灌注成像中使用时空卷积神经网络预测急性缺血性中风的特定治疗病变结果| 文献速递-深度学习自动化疾病检查

Title 题目 Predicting treatment-specific lesion outcomes in acute ischemic stroke from 4D CT perfusion imaging using spatio-temporal convolutional neural networks 从4D CT灌注成像中使用时空卷积神经网络预测急性缺血性中风的特定治疗病变结果 01 文献速递介绍…

CentOS 6.5 配置国内在线yum源和制作openssh 9.8p1 rpm包 —— 筑梦之路

CentOS 6.5比较古老的版本了&#xff0c;而还是有一些古老的项目仍然在使用。 环境说明 1. 更换国内在线yum源 CentOS 6 在线可用yum源配置——筑梦之路_centos6可用yum源-CSDN博客 cat > CentOS-163.repo << EOF [base] nameCentOS-$releasever - Base - 163.com …

架构师学习理解和总结

1.架构设计理念 2.架构方法论 2.1需求分析 2.1.1常见需求层次 2.1.2 常见需求结果 2.1.3 需求与架构关系 2.2 领域分析 2.3 关键需求 2.4 概念架构设计 2.5 细化架构设计 2.6 架构设计验证 3.架构设计工具 3.1 DDD领域建模 3.2 41视图分析法 3.3 UML设计工具 4.架构师知…

昇思11天

基于 MindSpore 实现 BERT 对话情绪识别 BERT模型概述 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;是由Google于2018年开发并发布的一种新型语言模型。BERT在许多自然语言处理&#xff08;NLP&#xff09;任务中发挥着重要作用&am…

《侃侃而谈 · 关于接外单的一些事》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…