JavaEE学习记录 day02继承、重写、抽象类、代码块

用树莓派+BrickPi复活乐高机器人,Scratch编程实现无人配送车 在嵌入式系统与机器人技术领域,传感器数据采集与电机控制是核心基础。其原理在于通过微控制器或单板计算机的GPIO接口,读取传感器模拟/数字信号,并输出PWM等控制信号驱动执行器。这项技术的价值在于构建了物理世界与数字世界的桥梁,是实现自动化、智能化的关键。在STEAM教育、创客项目中,它常被用于制作智能小车、机器人等教学平台。本文聚焦于一个典型应用:利用树莓派单板计算机与BrickPi扩展板,构建一个兼容老旧乐高传感器与电机的嵌入式控制系统。通过Scratch图形化编程环境,学生可以直观地实践事件驱动编程与传 阅读详情

JavaEE学习记录 day02继承、重写、抽象类、代码块

##思维导图
思维导图

1.继承的概念

继承是面向对象的三大特征之一,可以使子类具有父类的属性和方法,还可以在子类中重写这些方法或追加属性和方法。

2.继承的格式和好处
class Zi extends Fu{}

关键字:extends
使用继承的好处是提高代码的复用性,便于之后代码的维护。但缺点在于父类和子类之间产生联系,提高了代码的耦合性。
使用继承的场景需要考虑类与类之间是否存在is…a关系。

3.继承的特点

-Java中的类只支持单继承,不支持多继承如:

class A extends B,C{}

是错误的,但支持多层继承,如

class A extends B{}
class C extends A{}

继承中的变量访问采用就近原则,也就是现在子类局部找,然后在成员范围内找,再去父类成员找,都找不到就会报错,不会考虑父类的父类。

class Fu {
    int num = 10;
}
class Zi extends Fu{
    int num = 20;
    public void show(){
        int num = 30;
        System.out.println(num);
        System.out.println(this.num);
        System.out.println(super.num);
    }
}
public class Demo1 {
    public static void main(String[] args) {
        Zi z = new Zi();
        z.show();	// 输出show方法中的局部变量30,在输出子类成员变量20,在输出父类10
    }
}

在变量同名状态下,想要调用成员变量和父类成员要使用this和super关键字

  • this:代表本类对象的应用

  • super:代表父类存储空间的标识(可以理解为父类对象引用)

  • this和super的使用分别

  • 成员变量:

    • this.成员变量 - 访问本类成员变量
    • super.成员变量 - 访问父类成员变量
  • 成员方法:

    • this.成员方法 - 访问本类成员方法
    • super.成员方法 - 访问父类成员方法
  • 构造方法:

  • this(…) - 访问本类构造方法

  • super(…) - 访问父类构造方法

注意:子类中所有的构造方法默认都会访问父类中无参的构造方法

​ 子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,一定要先完成父类数据的初始化,原因在于,每一个子类构造方法的第一条语句默认都是:super()

问题:如果父类中没有无参构造方法,只有带参构造方法,该怎么办呢?*

1. 通过使用super关键字去显示的调用父类的带参构造方法
2. 子类通过this去调用本类的其他构造方法,本类其他构造方法再通过super去手动调用父类的带参的构造方法

注意: this(…)super(…) 必须放在构造方法的第一行有效语句,并且二者不能共存

方法的重写

重写只会出现在继承父类的子类中,对父类的方法进行重写

  • 注意事项
    私有方法不能重写
    被final关键字修饰的方法不能重写
    静态方法不能重写
    @Override注解是用来检测当时方法是否是重写方法
  • 重写和重载的区别
    重写出现在继承中,在有父子类的情况下,子类对父类的方法进行重写,除方法体改变外,其他不变,若是重写抽象方法则需要去掉abstract.
    重载出现在同一类中,指方法名相同,参数列表不同的方法,与修饰符和返回值无关。
public class Fu {
    private void show() {
        System.out.println("Fu中show()方法被调用");
    }

    void method() {
        System.out.println("Fu中method()方法被调用");
    }
}

public class Zi extends Fu {

    /* 编译【出错】,子类不能重写父类私有的方法*/
    @Override
    private void show() {
        System.out.println("Zi中show()方法被调用");
    }
   
    /* 编译【出错】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    private void method() {
        System.out.println("Zi中method()方法被调用");
    }

    /* 编译【通过】,子类重写父类方法的时候,访问权限需要大于等于父类 */
    @Override
    public void method() {
        System.out.println("Zi中method()方法被调用");
    }
}

权限修饰符

权限修饰符

抽象类

关键字:abstract
抽象类和抽象方法的书写格式

public abstract class 类名{
public abstract void 方法名();
}
  • 抽象类中不一定有抽象方法,有抽象方法的类一定是抽象类

  • 抽象类不能实例化

  • 抽象类可以有构造方法

  • 抽象类的子类

    ​ 要么重写抽象类中的所有抽象方法

    ​ 要么是抽象类

模板设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。
示例代码:

public abstract class CompositionTemplate {

    public final void write(){
        System.out.println("<<我的爸爸>>");

        body();

        System.out.println("啊~ 这就是我的爸爸");

    }

    public abstract void body();
}

实现类A

public class Tom extends CompositionTemplate {

    @Override
    public void body() {
        System.out.println("那是一个秋天, 风儿那么缠绵,记忆中, " +
                "那天爸爸骑车接我放学回家,我的脚卡在了自行车链当中, 爸爸蹬不动,他就站起来蹬...");
    }
}

实现类B


public class Tony extends CompositionTemplate {
    @Override
    public void body() {
		System.out.orintln("示例");
    }

    
}

测试类

public class Test {
    public static void main(String[] args) {
        Tom t = new Tom();
        t.write();
    }
}

final关键字

  • fianl关键字的作用

    • final代表最终的意思,可以修饰成员方法,成员变量,类
  • final修饰类、方法、变量的效果

    • fianl修饰类:该类不能被继承(不能有子类,但是可以有父类)

    • final修饰方法:该方法不能被重写

    • final修饰变量:表明该变量是一个常量,不能再次赋值

      • 变量是基本类型,不能改变的是值

      • 变量是引用类型,不能改变的是地址值,但地址里面的内容是可以改变的

4.代码块

在Java中,使用 { } 括起来的代码被称为代码块

代码块分类
  • 局部代码块

    • 位置: 方法中定义

    • 作用: 限定变量的生命周期,及早释放,提高内存利用率

    • 示例代码

      public class Test {
          /*
              局部代码块
                  位置:方法中定义
                  作用:限定变量的生命周期,及早释放,提高内存利用率
           */
          public static void main(String[] args) {
              {
                  int a = 10;
                  System.out.println(a);
              }
      
             // System.out.println(a);
          }
      }
      
  • 构造代码块

    • 位置: 类中方法外定义

    • 特点: 每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行

    • 作用: 将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性

    • 示例代码

      public class Test {
          /*
              构造代码块:
                  位置:类中方法外定义
                  特点:每次构造方法执行的时,都会执行该代码块中的代码,并且在构造方法执行前执行
                  作用:将多个构造方法中相同的代码,抽取到构造代码块中,提高代码的复用性
           */
          public static void main(String[] args) {
              Student stu1 = new Student();
              Student stu2 = new Student(10);
          }
      }
      
      class Student {
      
          {
              System.out.println("好好学习");
          }
      
          public Student(){
              System.out.println("空参数构造方法");
          }
      
          public Student(int a){
              System.out.println("带参数构造方法...........");
          }
      }
      
  • 静态代码块

    • 位置: 类中方法外定义

    • 特点: 需要通过static关键字修饰,随着类的加载而加载,并且只执行一次

    • 作用: 在类加载的时候做一些数据初始化的操作

    • 示例代码

      public class Test {
          /*
              静态代码块:
                  位置:类中方法外定义
                  特点:需要通过static关键字修饰,随着类的加载而加载,并且只执行一次
                  作用:在类加载的时候做一些数据初始化的操作
           */
          public static void main(String[] args) {
              Person p1 = new Person();
              Person p2 = new Person(10);
          }
      }
      
      class Person {
          static {
              System.out.println("我是静态代码块, 我执行了");
          }
      
          public Person(){
              System.out.println("我是Person类的空参数构造方法");
          }
      
          public Person(int a){
              System.out.println("我是Person类的带...........参数构造方法");
          }
      }
      
自动化测试软件设计:C# + VISA 库实现多接口(GPIB/USB)测试仪器控制 本文介绍了如何利用C#和VISA库开发支持多接口的自动化测试软件。VISA库作为标准化API,能够统一控制GPIB、USB等不同接口的测试设备。文章详细阐述了软件设计目标,包括多接口支持、统一控制、自动化脚本执行等功能。重点讲解了C#中VISA库的安装配置,并提供了设备控制类的核心代码实现,涵盖设备连接、命令发送、响应读取等关键操作。通过具体示例展示了GPIB和USB设备的连接方式,并扩展了自动化测试脚本功能。该方案具有高扩展性和维护性,适用于电子设备测试、生产线检测等多种场景,为自动化测试系统开发提供了实 阅读详情

相关推荐

欧姆龙485通讯示例程序_【精品实验】PLC学习神器与温湿度变送器的通讯

BFH点击蓝字关注我们↑↑↑↑  PLC学习神器提供RS485接口,可支持无协议RS指令、无协议RS2指令、Modbus通讯功能,可通过设置通讯格式改变通讯协议,RS485对应的通讯格式地址是D8400;  本案例以RS485接口与温湿度变送器通讯,通讯格式如下一温湿度变送器的说明书介绍1.1主要技术参数1.2 通讯协议 1、所有通讯回路都应遵照主/从方式。依照主从方式,数据可以在一个主...

weixin_39860201的博客 1万+

定义一个不能被继承的类

学习完C++我们知道了,类是可以被继承的,而继承也分为三种就是:public、private、protected。那么我们如何定义一个不能被继承的类呢? 在C++里面子类的构造函数会去调父类的构造函数,而子类的析构函数也会去调父类的析构函数。如果我们想让一个类不能被继承,那么就把它的构造函数和析构函数定义为私有的,这样当一个类去继承时调构造函数和析构函数的时候就会发生编译错误。可是这样又会引发一个

Payshent的博客 1561

高通Camx架构调试不求人:手把手教你开UMD/KMD Log与Dump图像(附离线Log合成脚本)

本文详细介绍了高通Camx架构的调试方法,包括UMD/KMD Log的精准配置与图像Dump技术,帮助工程师快速定位移动影像系统中的问题。通过实战案例和自动化脚本,提升调试效率,适用于图像色彩异常、帧率波动等常见问题的诊断与解决。

weixin_30516243的博客 254

编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; )编写Bird类和Fish类的测试程序,并调用其中的run()方法

abstract void run();//定义抽象方法 } class Bird implements Animal {// 实现接口 public void run() { System.out.println("测试run方法成功"); } } class Fish implements Animal {// 实现接口 public void run() { System.

f19971023的博客 6797

DIKW模型实战:用Obsidian打造个人知识库的5个关键步骤

本文详细介绍了如何利用DIKW模型在Obsidian中构建高效个人知识库的5个关键步骤,从数据收集到智慧应用的全流程实践。通过标记系统、信息加工引擎和知识结晶方法,帮助知识工作者实现从原始数据到决策智慧的认知跃迁,提升个人知识管理效率。

gamma的博客 578

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 172

【02】Java进阶:02-静态、继承、模板设计模式、抽象类、final

day02 【复习回顾、继承、抽象类模板设计模式】 今日内容 面向对象复习 继承------重点 抽象类----重点 模板设计模式 final 关键字-----理解使用 教学目标 - 能够写出类的继承格式 - 能够说出继承的特点 - 能够说出子类调用父类的成员特点 - 够说出方法重写的概念 - 能够说出this可以解决的问题 - 能够说出super可以解决的问题 - 描述抽象方法的概念 - 写出抽象类的格式 - 写出抽象方法的格式 - 能够说出父类抽象方法的存在意义 - 描述fina

忘尘丶莫负的博客 450

工业级稳定!C# 实现 Modbus RTU 多设备并发通信实战

摘要:本文提出一种基于C#的Modbus RTU多设备并发通信方案,解决工业自动化中单线程通信的串口抢占、数据阻塞等问题。采用任务队列+线程安全锁+异步调度的三层架构,实现16台及以上RTU设备的稳定并发读写。方案包含串口管理单例、Modbus通信核心和任务调度层,支持超时重试、异常捕获等工业级容错机制。通过NModbus库和.NET框架,提供可直接用于工业现场的代码实现,已在工控项目中长期验证,有效提升多设备通信效率和稳定性。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 581

Java中继承的定义与使用

文章目录继承1.1 继承的实现1.2 继承的限制1.2.1 子类对象在进行实例化前首先调用父类构造方法,产生父类对象后再调用子类构造方法实例化子类对象。1.2.2 Java只允许单继承不允许多继承(一个子类继承一个父类)1.2.3 在继承时,子类会继承父类的所有结构。阿里java校招笔试题 继承   继承的主要作用在于,在已有基础上继续进行功能的扩充。 定义两个类(学生、人): class Per...

zhao_miao的博客 4万+

ArcGIS笔记13_利用ArcGIS制作岸线与水深地形数据?建立水动力模型之前的数据收集与处理?

在利用MIKE建立水动力模型之前,需要收集、处理和制作诸多数据和资料,主要有岸线数据、水深地形数据、开边界潮位驱动数据、风场数据、潮位和海流观测资料和站点潮汐调和常数资料等。本篇主要介绍这些资料的获取与处理。

晏长街的博客 5948

Python爬虫博客:如何抓取时事新闻信息 —— 从各大新闻网站获取实时新闻数据

发送请求:向目标新闻网站发送 HTTP 请求,获取网页内容。解析网页:使用解析库(如)从网页中提取新闻标题、摘要、内容、发布时间等。绕过反爬虫机制:使用代理、设置请求头、模拟浏览器行为等策略绕过反爬虫技术。数据存储与清洗:将抓取的数据保存到本地文件或数据库中,并进行清洗,确保数据的可用性。在抓取过程中,我们还会面对很多实际问题,比如反爬虫技术、分页抓取、动态加载的内容等。接下来,我们将逐步介绍如何使用不同技术抓取静态和动态网页,并对抓取的内容进行处理。Scrapy。

2201_76125261的博客 2135

27.编写一个Animal类,具有属性:种类;具有功能:吃、睡。定义其子类Fish 和Dog,定义主类E,在其main方法中分别创建其对象并测试对象的特性。...

///Animal类 package d922A; public class Animal { private String kind; public String getKind() { System.out.println(kind); return kind; } public void setKind(String kind) { this.kin...

weixin_30851867的博客 1万+

Matplotlib之bar3d画3D柱状图

3D柱状图通常用于展示数据集中不同分类项的数据大小或数量。与普通的柱状图相比,3D柱状图更适合展示数据的三个维度 3D 柱状图 按行/列涂颜色 柱加阴影、描黑边 自定义座标轴名、刻度标签、范围

我走的每一步都算数 1122

Java学习日志Day11_继承实例_多态_继承多态实例_抽象类初窥

一、继承 二、多态

igfff的博客 312

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JavaEE学习记录day03接口、多态、内部类、Lambda表达式

JavaEE学习记录day03接口、多态、内部类、Lambda表达式 思维导图: 1.接口 1.1接口的概述 接口概述:接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用 Java中接口存在的两个意义 用来定义规范 用来做功能的拓展 1.2接口的特点 接口关键字:interface 定义接口格式: public interface 接口名{} 实现接口格式: public class 类名 implements 接口名 接口特点 接口不能实例化 可以创建接口的实现类对象

PTQ233的博客 399

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从零开始学习JAVAEE学习笔记&采坑日记Day1-学习一点JAVA知识

学习记录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 Day1学习记录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 以前只是会用JAVA写Helloworld的程度,结果因为选了JAVAEE要从零开始学JAVA和SPRING框架……从零开始学习记录一下学习过程和踩到的坑吧。 一、pandas是什么? 示例:pandas 是

oldjang的博客 148

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JavaEE-Day11 (接口)

- 接口 -

qq_58293159的博客 313

学习日记-day13-5.22

a.eat()调用的是Dog重写方法;维护部(Maintainer)根据所需维护的内容不同,又分为 网络维护工程师(Network) 、硬件维护工程师(Hardware)。方法形参定义为父类类型(void method(Animal a)),可传递不同子类对象(Dog/Cat),调用各自重写方法。JDK8新增特性,格式为public default 返回值 方法名(),包含方法体实现,可通过实现类对象调用。父类引用指向子类对象(Animal a = new Dog()),通过父类类型调用子类重写方法。

qq_59714927的博客 771

Java学习—Day06

自学Java-day06 一、eclipse快捷键 ctrl+t 查看选中类的继承树 public abstract class Employee { public abstract void work(); } public class JavaEE extends Employee { public void work() { //覆盖抽象方法 } } Ctrl+滑动鼠标点...

敷衍zgf的博客 286

我的javaweb学习笔记

我的假期笔记

weixin_51673192的博客 399

刘意JavaSE 学习笔记——总纲

开始学习JavaSE了,记录下自己学习的进程。   学习大纲   1 开发环境配置 day01 配置 2 基础语法(基本差不多,看一下就好) day02 命名规则,进制转换 day03 运算符,if语句 day04 switch,for,while,break,continue,return语句 day05 方法 重载 一维数组 day06 二维数组 类,对象,内存解析 以...

desperatecat的博客 3851

传智播客黑马java 30期_黑马传智播客JavaEE57期 2019最新基础+就业+在职加薪_汇总...

黑马传智JavaEE57期 2019最新基础+就业+在职加薪文件路径:G:\学习中\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\阶段1 语言基础+高级·\1-2 -面向对象和封装阶段1 语言基础+高级·阶段1 语言基础+高级·1-1-Java基础语法第14节 数组111H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\讲义+笔记+资料\Java基础\...

weixin_42104906的博客 769

14年刘意java笔记_刘意JavaSE 学习笔记——总纲

开始学习JavaSE了,记录下自己学习的进程。学习大纲1 开发环境配置day01 配置2 基础语法(基本差不多,看一下就好)day02 命名规则,进制转换day03 运算符,if语句day04 switch,for,while,break,continue,return语句day05 方法 重载 一维数组day06 二维数组 类,对象,内存解析以上花3天时间3【重点难点】面向对象(封装、继承、多态...

weixin_36377785的博客 409

工作中使用到的单词(软件开发)_第三版

====

sun0322 1万+

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

如何定义一个不能被继承的类

用C++设计一个不能被继承的类 不能被继承?不能被继承?不能被继承?按照继承的理论知识分析,我们只要把类的构造函数设置为私有的,即可解决问题。 因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可继承的目的。 但是,假设那样,这个类我们在其它地方怎么使用呢?那这样子给我们的利用也造成了一定的障碍。 好了。你是不是也想到了,定义静态方法,在方...

spliulin的专栏 456
下一篇: JavaEE学习记录day03接口、多态、内部类、Lambda表达式
PTQ233
博客等级 码龄9年 1粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值