【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访问修饰符,所以外部无法调用。
    • 枚举可以包含具体方法、抽象方法。如果枚举类有抽象方法,则枚举类的每个实例都必须实现它。

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

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

相关文章

2025年AI和AR谁才是智能眼镜的未来

在2025年,智能眼镜市场正迎来一场技术革新的浪潮,其中AI和AR技术的竞争尤为激烈。那么,究竟谁才是智能眼镜的未来呢?让我们来一探究竟。 AI眼镜的崛起 AI眼镜通过集成人工智能技术,提供了语音识别、环境感知和个性化服…

java实现预览服务器文件,不进行下载,并增加水印效果

通过文件路径获取文件,对不同类型的文件进行不同处理,将Word文件转成pdf文件预览,并早呢更加水印,暂不支持Excel文件,如果浏览器不支持PDF文件预览需要下载插件。文中currentUser.getUserid(),即为增加的水…

快速上手大模型的对话生成

本项目使用0.5B小模型,结构和大模型别无二致,以方便在如CPU设备上快速学习和上手大模型的对话上传 #mermaid-svg-Z86hUiQZ0hg9BVji {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Z86hUiQZ0h…

Unreal虚幻引擎使用遇到的问题记录

文章目录 The game module ‘MyGame’ could not be loaded. There may be an operating system error or the module may not be properly set up The game module ‘MyGame’ could not be loaded. There may be an operating system error or the module may not be properl…

在Unity中用Ab包加载资源(简单好抄)

第一步创建一个Editor文件夹 第二步编写BuildAb(这个脚本一点要放在Editor中因为这是一个编辑器脚本,放在其他地方可能会报错) using System.IO; using UnityEditor; using UnityEngine;public class BuildAb : MonoBehaviour {// 在Unity编…

丢弃法hhhh

一个好的模型需要对输入数据的扰动鲁棒 丢弃法:在层之间加入噪音,等同于加入正则 h2和h5变成0了 dropout一般作用在全连接隐藏层的输出上 Q&A dropout随机置零对求梯度和求反向传播的影响是什么?为0 dropout属于超参数 dropout固定随…

mysql 报错 ERROR 1396 (HY000) Operation ALTER USER failed for root@localhost 解决方案

参考:https://blog.csdn.net/m0_74824534/article/details/144177078 mysql 修改密码 ALTER USER ‘root’‘localhost’ IDENTIFIED BY ‘123’; 时,报错 ERROR 1396 (HY000): Operation ALTER USER failed for rootlocalhost 解决方案: 2024-4-3 段子…

Three.js Journey (notes2)

ref Three.js中文网 Three.js Journey — Learn WebGL with Three.js Part 1 Fullscreen and resizing When the double click happens, we will toggle the fullscreen —meaning that if the window is not in fullscreen, a double-click will enable fullscreen mode, …

C# 中 `new` 关键字的用法

在 C# 中,new 关键字用于修饰方法、属性、索引器或事件声明时,表示当前成员隐藏基类中同名的成员。它们之间的具体区别如下: 不加 new: 如果子类定义了一个与父类同名的方法,但没有使用 new 关键字,编译器会…

深入理解Python中的常用数据格式(如csv、json、pickle、npz、h5等):存储机制与性能解析

在数据科学与工程领域,数据的存储与读取是日常工作中不可或缺的一部分。选择合适的数据格式不仅影响数据处理的效率,还关系到存储空间的利用与后续分析的便捷性。本文将以通俗易懂的方式,深入探讨Python中几种常用的数据读写格式(…

Ubuntu开机The root filesystem on /dev/sdbx requires a manual fsck 问题

出现“Manual fsck”错误可能由以下几种原因引起: 不正常关机:如果系统意外断电或被强制重启,文件系统可能未能正确卸载,导致文件系统损坏。磁盘故障:硬盘的物理损坏可能会引发文件系统错误。文件系统配置问题&#x…

Django Admin 以管理 AWS Lambda 函数

在现代云计算环境中,AWS Lambda 函数已成为构建无服务器应用程序的重要组成部分。作为开发者或运维工程师,有效管理这些 Lambda 函数是一项关键任务。今天,我们将探讨如何利用 Django Admin 创建一个强大而直观的界面来管理 AWS Lambda 函数。 背景 假设我们已经创建了一个…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

Science Robotics让软机器人“活”得更久的3D打印!

软机器人硬件在医疗、探索无结构环境等领域有广泛应用,但其生命周期有限,导致资源浪费和可持续性差。软机器人结合软硬组件,复杂组装和拆卸流程使其难以维修和升级。因此,如何延长软机器人的生命周期并提高其可持续性成为亟待解决…

Vue3实战教程》24:Vue3自定义指令

如果您有疑问,请观看视频教程《Vue3实战教程》 自定义指令​ 介绍​ 除了 Vue 内置的一系列指令 (比如 v-model 或 v-show) 之外,Vue 还允许你注册自定义的指令 (Custom Directives)。 我们已经介绍了两种在 Vue 中重用代码的方式:组件和组…

面试题:@Transactional 注解在自调用情况下会失效原因

Transactional 注解在自调用情况下会失效,这主要是由于 Spring 事务管理的实现机制所导致的。以下是对这一问题的详细解释: 一、Spring 事务管理的实现机制 Spring 的事务管理是基于 AOP(面向切面编程)实现的,它通过…

Speech Recognition vs. Voice Recognition | 语音识别工作原理 | 模型训练 | 应用

注:Speech Recognition 与 Voice Recognition 机翻混淆,未校。 Speech Recognition vs. Voice Recognition: In Depth Comparison 语音识别与语音识别:深度比较 Calendar12 July 2023 Have you ever stopped to think about how your voice…

[ubuntu-22.04]ubuntu不识别rtl8153 usb转网口

问题描述 ubuntu22.04插入rtl8153 usb转网口不识别 解决方案 安装依赖包 sudo apt-get install libelf-dev build-essential linux-headers-uname -r sudo apt-get install gcc-12 下载源码 Realtek USB FE / GBE / 2.5G / 5G Ethernet Family Controller Softwarehttps:/…

USB 控制传输的 PID 序列

文章目录 USB 控制传输的 PID 序列PID 序列setup 设置阶段data 数据阶段status 状态阶段setup + in data + out statussetupin dataout statussetup + in statussetupin statussetup + out data + in statussetupout datain status为什么需要了解 PID 序列状态转换总结参考USB …

LeetCode题解:2625. 扁平化嵌套数组,递归

原题链接 https://leetcode.cn/problems/flatten-deeply-nested-array/ 题目解析 题目要求我们将一个多维数组扁平化到指定的深度。具体来说,我们需要将数组中的子数组扁平化,直到达到给定的深度n。如果子数组的深度大于n,则不进行扁平化。…