【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眼镜通过集成人工智能技术,提供了语音识别、环境感知和个性化服…

在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, …

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

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

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

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

黑马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 中重用代码的方式:组件和组…

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 …

前端-动画库Lottie 3分钟学会使用

目录 1. Lottie地址 2. 使用html实操 3. 也可以选择其他的语言 1. Lottie地址 LottieFiles: Download Free lightweight animations for website & apps.Effortlessly bring the smallest, free, ready-to-use motion graphics for the web, app, social, and designs.…

在Ubuntu 18.04.6 LTS安装OpenFace流程

一、修改配置:将gcc8,g8作为默认选项 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 100 sudo update-alternatives --config gcc 选择版本,再查看gcc --version sudo update-alternatives --install /usr/bin/g g /usr/bin/g-…

Flink源码解析之:如何根据JobGraph生成ExecutionGraph

Flink源码解析之:如何根据JobGraph生成ExecutionGraph 在上一篇Flink源码解析中,我们介绍了Flink如何根据StreamGraph生成JobGraph的流程,并着重分析了其算子链的合并过程和JobGraph的构造流程。 对于StreamGraph和JobGraph的生成来说&…

生成式AI与RAG架构:如何选择合适的向量数据库?

大规模语言模型和情境感知的AI应用程序推动了检索增强生成(RAG)架构的发展,使其成为关注的焦点。RAG将生成模型的力量与外部知识相结合,允许系统生成更加具体且与情境相关的回应。 向量数据库构成了RAG系统的基石。选择正确的向量…

电脑找不到mfc110.dll文件要如何解决?Windows缺失mfc110.dll文件快速解决方法

一、mfc110.dll文件的重要性 mfc110.dll,全称Microsoft Foundation Class Library 110,是Microsoft Visual C Redistributable for Visual Studio 2012的一部分。这个动态链接库(DLL)文件对于支持基于MFC(Microsoft F…

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!

大模型Weekly 03|OpenAI o3发布;DeepSeek-V3上线即开源!DeepSeek-V3上线即开源;OpenAI 发布高级推理模型 o3https://mp.weixin.qq.com/s/9qU_zzIv9ibFdJZ5cTocOw?token47960959&langzh_CN 「青稞大模型Weekly」,持…

4、上一个接口返回值,作为下一个方法(接口)的变量

import requestsclass TestCase:# 设置1个类变量B "初始值"def test1(self):url "**这里是接口url**"params {"type": "json"}resp1 requests.get(urlurl, paramsparams)# .json()用于将服务器返回的 JSON 格式的响应内容解析为 P…