当前位置: 首页 > news >正文

【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举

学习资料 菜鸟教程

https://www.runoob.com/java/java-interfaces.html

继承|Override/Ovverload|多态|抽象类|封装|接口|枚举

继承 创建分等级层次的类,子类继承父类的特征、行为、方法

  • class 父类{
    }
    class 子类 extends 父类{
    super();
    }
    

一些性质

  • Java 不支持多继承(一个类继承2个父类),但支持多重继承。

  • 请添加图片描述

  • 子类拥有父类非private的属性、方法。缺点是耦合度高代码独立性越差。

  • extends和implements关键字

    • 所有的类都是继承于java.lang.Object,默认继承Object
    • extends
      • 单一继承,一个子类只能拥有一个父类
    • implements 类继承接口可多继承
      • 使java具有多继承的特性,使用范围为类继承接口的情况,可以同时继承多个接口(,)
      • public interface A {public void eat();public void sleep();
        }public interface B {public void show();
        }public class C implements A,B {
        }
        
  • super与this关键字

    • super
      • 对父类成员的访问,用来引用当前对象的父类。
    • this
      • 对自己的引用,引用当前对象(自己的方法或构造函数所属的对象实例)
  • final关键字

    • 修饰变量(类属性、对象属性、局部变量和形参)、方法(包括类方法和对象方法)和类。
    • 定义为最终类,不能被继承,或者用于修饰方法,该方法不能被子类重写。
      • 声明类: final class 类名 {//类体}
      • 声明方法: 修饰符(public/private/default/protected) final 返回值类型 方法名(){//方法体}
  • 构造器

    • 子类不继承父类的构造器(构造方法和构造函数)。
    • 继承构造器的方法
      • 无参构造器 直接继承
      • 带参构造器,用super来继承参数。
        • // 带参数构造器,调用父类中带有参数的构造器public SubClass(int n) {super(300);System.out.println("SubClass(int n): " + n);this.n = n;}
          

Java重写(Override)和Java重载(Overload)

重写(Override)

  • 本质:指子类定义了一个与其父类相同外壳(相同名称、参数列表、返回类型)的方法
  • 自定义父类方法,个性化
  • 返回类型可以不同,但必须是父类返回值的派生类
  • 声明为final的方法不能被重写;声明为static的方法不能被重写但能被再次声明
  • 子类和父类是否在一个包
    • 在,可以重写除了声明private和final的方法
    • 不在,重写父类声明为public和protected的非final方法
  • 构造方法不能被重写。
  • super. 子类如果想调用父类的方法,用这个

重载(Overload)

  • 在一个类里面,方法名字相同,而参数不同,返回类型可以不同。重载方法有独一无二的参数类型列表。
  • 构造器的重载
  • 规则
    • 必须改变参数列表(个数类型不一样)
    • 可以声明更广的检查异常

重写和重载的区别

  • 参数列表、返回类型、异常、访问
  • 重载:参数列表必须修改|其他的可以修改
  • 重写:参数列表、返回类型一定不能修改|异常和访问不能更高广。

Java多态

  • 核心:同一个行为具有多个不同表现形式或形态的能力;多态是同一个接口,使用不同的实例而执行不同操作。

  • 3个必要条件

    • 继承
    • 重写
    • 父类引用指向子类对象:Parent p=new Child();

    请添加图片描述

  • 多态的转型

    • 向上转型(Upcasting) 将子类对象赋值给父类引用。
      • 例如:Animal a = newCat(); // 向上转型 **
        a.eat(); // 调用的是 Cat 的 eat**
      • 通过a只能调用Animal类中声明的方法,但实际运行时会调用Cat类的重写版本(多态的体现)。父类引用只能访问父类中声明的方法和属性,不能直接访问子类特有的方法或属性。
    • 向下转型(Downcasting)
      • 父类引用(指向子类对象)重新转型为子类类型引用,以便访问子类的特有方法或属性。
      • Cat c=(Cat)a; c.work();
  • 虚函数

    • 如果不希望某个函数具有虚函数特性,加final
  • 多态的实现方式

    • 重写
    • 接口 (类比为插座)
    • 抽象类和抽象方法

抽象类

  • 不充分的信息来描绘一个具体的对象;不能实例化对象,必须被继承。
  • public abstract class定义抽象类,可以【继承抽象类】的成员方法、成员类
  • 【抽象方法】
    • 抽象方法有特殊的成员方法,和具体的abstract子类实现。
    • 只包含方法名,没有方法体
    • 子类继承了抽象类,任何子类必须重写父类的抽象方法,或者声明自身为抽象类。
    • 抽象类不能被实例化
    • 抽象类中不一定包含抽象方法,但有抽象方法的类必定是抽象类。包含抽象方法的类必须是抽象类。
    • 构造方法,类方法(static)不能声明为抽象方法。

封装

  • 作用:良好的封装减少耦合;类内部的结果可以自由修改;可以对成员变量进行更精确的控制;隐藏信息,实现细节。
  • public class Person{private String name;//实例变量和局部变量的冲突private int age;public int getAge(){return age;}public String getName(){return name;}public void setAge(int age){this.age = age;}public void setName(String name){this.name = name;}
    }
    
  • 步骤
    • 修改属性的可见性来限制对属性的访问。(private)
    • 对每个值属性提供对外的公共方法访问
  • 任何要访问类中私有成员变量的类都要通过【getter和setter】方法。

接口

  • 抽象方法的集合,interface

  • 一个类通过继承接口的方式,来继承接口的抽象方法。

  • 类描述对象的属性和方法,接口则包含类要实现的方法。 除非实现接口的类是抽象类,否则该类要定义接口中的所有方法。

  • 接口无法被实例化,但可以被实现。一个实现接口的类,必须实现接口内所描述的所有方法,否则就必须声明为抽象类。

  • 特性

    • 接口中所有的方法必须是抽象方法
    • 接口不能包含成员变量,除了 static 和 final 变量。
    • 接口不是被类继承了,而是要被类实现。
    • 接口的方法是隐式抽象,接口的变量被隐式指定为public static final变量。
    • 接口中的方法是共有的
  • 抽象类和接口的区别

    • JDK1.8以后,接口有静态方法和方法体了。
    • 接口中的成员变量只能是public static final类型的。
    • 接口中不能含有静态代码块以及静态方法。
    • 一个类只能继承一个抽象类,一个类可以实现多个接口。
    • 接口不能包含成员变量,除了 static 和 final 变量。
  • 接口Code

    • 1

      [可见度] interface 接口名称 [extends 其他的接口名] {// 声明变量// 抽象方法
      }
      
    • 2

      /* 文件名 : Animal.java */
      interface Animal {public void eat();public void travel();
      }
      
  • 接口的实现

    • 当类实现接口的时候,类要实现接口中所有的方法,否则,类必须声明为抽象的类。
    • 类使用implements来实现接口。
      ...implements 接口名称[, 其他接口名称, 其他接口名称..., ...] ...
      
    • publicclassMammalIntimplementsAnimal{
  • 重写接口中声明的方法

    • 不能抛出强制性异常,只能在接口中或者继承接口的抽象类中抛出该强制性异常。
    • 保持方法名一致,返回值类型一致。
    • 如果实现该接口的类是抽象类,就没必要实现该接口的方法。
  • 规则

    • 一个类可以同时实现多个接口
    • 一个接口能继承另一个接口 extends
  • 接口的多继承

    • public interface Hockey extends Sports,Event
  • 标记接口

  • 没有包含任何方法和属性的接口,打个标签是什么类型。

  • 用处

    • 公共的父接口
    • 向一个类添加数据类型

Java枚举(enum)

  • 特殊的类,一组常量
    • 1
      enum Color
      {
      RED,GRENN,BLUE;
      }
      public class Test{
      public static void main(String[] args)
      {
      Color c1=Color.RED;
      System.out.println(c1);}}
      
    • 内部类也可以使用枚举
    • 迭代枚举元素
      for(Color myVar:Color.values()){
      System.put.println(myVar);)}
      
    • 在switch中使用枚举类
  • values(),ordinal()和valueOf()方法
    • enum定义的枚举类默认继承了ava.lang.Enum类,并实现了java.lang,Serializable和java.lang.Comparable两个接口
    • values()返回枚举类中所有的值
    • ordinal()找到每个枚举常量的索引,就像数组索引一样
    • valueOf()返回指定字符串值的枚举常量
  • 枚举类成员
    • 枚举跟普通类一样可以用自己的变量、方法和构造函数,构造函数只能使用private访问修饰符,所以外部无法调用。
    • 枚举可以包含具体方法、抽象方法。如果枚举类有抽象方法,则枚举类的每个实例都必须实现它。

相关文章:

【Java回顾】Day3 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举

学习资料 菜鸟教程 https://www.runoob.com/java/java-interfaces.html 继承|Override/Ovverload|多态|抽象类|封装|接口|枚举 继承 创建分等级层次的类,子类继承父类的特征、行为、方法 class 父类{ } class 子类 extends 父类{ super(); }一些性质 Java 不支持…...

SpringMVC(四)响应

目录 数据处理及跳转 1. 结果跳转方式 ①.ModelAndView ②.ServletAPI 1、通过HttpServletResponse进行输出 2、通过HttpServletResponse实现请求转发 3、通过HttpServletResponse实现重定向 ③.SpringMVC 1.直接输出 2.请求转发 3.重定向 2.ResponseBody响应json数…...

vim 的基础使用

目录 一:vim 介绍二:vim 特点三:vim 配置四:vim 使用1、vim 语法格式2、vim 普通模式(1)保存退出(2)光标跳转(3)文本删除(4)文本查找&…...

关于flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型问题

flinkCDC监控mysql binlog时,datetime类型自动转换成时间戳类型 问题解决1.自定义转换器类2.代码引用 结果 问题 flink版本:1.18.1,mysql版本:8.0.40 使用FlinkCDC的MySqlSource 连接mysql,对于datetime 类型字段&…...

基于Springboot校园失物招领系统【附源码】

基于Springboot校园失物招领系统 效果如下: 系统登陆页面 物品页面 系统首页面 失物招领管理页面 失物认领页面 宣传视频页面 物品挂失留言管理页面 宣传视频类型管理页面 研究背景 在校园环境中,失物招领是一个常见的问题。传统的失物招领方式主要依…...

单片机端口操作和独立引脚操作

单片机端口操作和独立引脚操作 在单片机编程中,控制I/O端口是最基础的操作之一。通过控制端口,我们可以实现对外设(如LED、按键、继电器等)的控制。在51单片机中,有两种常见的端口操作方式:整体控制&#…...

【Vim Masterclass 笔记03】S03L10 + S03L11:Vim 中的文本删除操作以及 Vim 思维习惯的培养(含 DIY 拓展知识点)

文章目录 Section 3:Vim Essentials(Vim 核心知识)S03L10 Vim 核心浏览命令同步练习点评课S03L11 Deleting Text and "Thinking in Vim" 文本的删除及 Vim 思维习惯的培养1 删除单个字符2 删除一个单词2.1 推广1:D HJK…...

ARM200~500部署

前提:数据库已经安装好,并且正常运行 1.修改hostname,将里面的AR-A 改为hzx vi /etc/hostname 2.重启网络服务 sudo systemctl restart NetworkManager 3.修改community-admin.service 文件,更改小区名称和IP,并将文件上传到/…...

word中插入zotero引用

1、参考文献末尾没有文献? 在文献条目要显示的地方点击“refresh” 2、参考文献条目没有悬挂缩进? 把“书目”添加到样式库中,修改样式为悬挂缩进1.5字符 3、交叉引用? 宏 新建一个宏 粘贴下面代码 Public Sub ZoteroLinkCita…...

需求上线,为什么要刷缓存?

在需求上线的过程中,刷缓存主要有以下几个重要原因: 一、保证数据的准确性 旧数据残留问题 缓存是为了加快数据访问速度而存储的数据副本。在需求更新后,之前缓存中的数据可能已经不符合新的业务逻辑。例如,一个电商网站修改了商…...

TVS二极管选型【EMC】

TVS器件并联在电路中,当电路正常工作时,他处于截止状态(高阻态),不影响线路正常工作,当线路处于异常过压并达到其击穿电压时,他迅速由高阻态变为低阻态,给瞬间电流提供一个低阻抗导通…...

《从入门到精通:蓝桥杯编程大赛知识点全攻略》(一)-递归实现指数型枚举、递归实现排列型枚举

本篇博客将聚焦于通过递归来实现两种经典的枚举方法:指数型枚举和排列型枚举。这两种枚举方式在计算机科学和算法竞赛中都有广泛应用,无论是在解题中,还是在实际工作中都极具价值。 目录 前言 斐波那契数列递归 递归实现指数型枚举 算法思…...

C#对线程同步的应用

什么是线程同步?线程同步的应用场景有哪些?在C#中有哪些线程同步方式?下面对这些问题做一个总结,让大家在面试的时候遇到这些问题能够游刃有余。 线程同步是指在多线程环境下,多个线程同时访问共享资源时,确…...

基于微信小程序的面部动作检测系统

引言 本技术文档旨在详细阐述一个基于微信小程序的面部动作检测系统的技术路线、实现方法及关键技术框架。系统的核心功能包括检测用户的左右转头、眨眼和张嘴动作,并根据检测结果逐步引导用户完成任务。为确保系统的安全性和准确性,特别是防止用户通过…...

Activation Functions

Chapter4:Activation Functions 声明:本篇博客笔记来源于《Neural Networks from scratch in Python》,作者的youtube 其实关于神经网络的入门博主已经写过几篇了,这里就不再赘述,附上链接。 1.一文窥见神经网络 2.神经…...

《Vue3实战教程》37:Vue3生产部署

如果您有疑问,请观看视频教程《Vue3实战教程》 生产部署​ 开发环境 vs. 生产环境​ 在开发过程中,Vue 提供了许多功能来提升开发体验: 对常见错误和隐患的警告对组件 props / 自定义事件的校验响应性调试钩子开发工具集成 然而&#xff…...

Linux:各发行版及其包管理工具

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 Debian 包管理工具:dpkg(低级包管理器)、apt(高级包管理器,建立在dpkg基础上)包格式:…...

【计算机网络】课程 作业一 搭建连续覆盖的办公网络

作业一 搭建连续覆盖的办公网络 题目:论述题(共1题,100分) 充分利用所学习的数据链路层局域网知识,加上物理层的基础知识,请给一个办公场所(三层,每层约100平方)&#xf…...

C++ 设计模式:单例模式(Singleton Pattern)

链接:C 设计模式 链接:C 设计模式 - 享元模式 单例模式(Singleton Pattern)是创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。单例模式在需要全局共享资源或控制实例数量的…...

OpenCV调整图像亮度和对比度

【欢迎关注编码小哥,学习更多实用的编程方法和技巧】 1、基本方法---线性变换 // 亮度和对比度调整 cv::Mat adjustBrightnessContrast(const cv::Mat& src, double alpha, int beta) {cv::Mat dst;src.convertTo(dst, -1, alpha, beta);return dst; }// 使用…...

华为云AI开发平台ModelArts

华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:

一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【快手拥抱开源】通过快手团队开源的 KwaiCoder-AutoThink-preview 解锁大语言模型的潜力

引言: 在人工智能快速发展的浪潮中,快手Kwaipilot团队推出的 KwaiCoder-AutoThink-preview 具有里程碑意义——这是首个公开的AutoThink大语言模型(LLM)。该模型代表着该领域的重大突破,通过独特方式融合思考与非思考…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

Java 加密常用的各种算法及其选择

在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...