202 | 抽象类、接口、内部类

抽象类 abstract

注意项

  • 父类方法需要声明,但是有不确定性,考虑将该方法设计为抽象方法
  • 抽象方法=没有实现的方法=没有方法体(跟接口的区别?)
  • 抽象方法的类必须设置为抽象类,实现方法由其子类实现
abstract class animal(){public abstract void eat();
}
  • 抽象类还是类,可以不包括抽象方法,也可以包括有实现方法,静态属性,构造器等等;但抽象方法一定属于抽象类
  • 抽象类不可被实例化
  • abstract 只能修饰方法,不能修饰属性和其他
  • 抽象方法不能有主体 {}
  • 抽象方法不能使用private、final和static来修饰;与子类重写父类方法冲突

模板设计模式

多个类完成不同的任务,要求统计不同任务执行的时间

  • 父类写成模板,将job()写为抽象方法
  • 多个工作类都继承父类,重写job即可,都实现了计算时间的功能
abstract public class Template{public abstract void job(); //抽象方法public void calculateTime(){long start = System.currentTimeMillis();job();long end= System.currentTimeMillis();System.out.println("执行时间" + { end - start });}
}

接口 interface

一些没有实现的方法,封装到一起就是接口。

使用细节

  • 普通类要用的时候,根据情况implements接口去实现方法,需要实现接口所有方法;一个类可以同时实现多个接口

  • 接口可以同时继承多个接口,写extends,不用implements

  • 抽象类实现接口时,可以不实现方法,但是需要有方法名?

  • jdk8后接口可以有静态和默认实现方法,默认方法需在接口方法中用default修饰 (此default含义不一样)

  • 接口管理多个实现类,传入向上转型?自动识别是哪个具体类,统一

  • 接口不能被实例化
    ======================================================================

  • 接口的修饰符只能时public和默认

  • 接口中的方法都是public and abstract,但是可以省略abstract关键字

  • 接口中的属性都是public static final;可以省略关键字,但是默认必须是;访问:接口名.属性名

实现接口 vs 继承类

  • 实现机制是对单继承的补充,加强子类功能;java只能单继承但可多实现
  • 子类继承父类,自动拥有父类功能,如果需要其他功能,可通过实现接口来实现。
  • 解决的问题:继承解决代码复用性和可维护性;接口设计好各种规范(方法)
  • 接口比继承更灵活,继承is-a,接口只需满足like-a or hava-a
  • 接口在一定程度上实现代码解耦 [接口规范性+动态绑定]

接口的多态

  • 多态参数,UsbInterface usbInterface 即可接收手机也可接收相机(手机、相机都实现于UsbInterface)
IF if01 = new Monster(); // 跟继承类似,接口指针(继承:父类对象指针)可指向其他实现接口的实例对象
if01 = new Cat();
  • 多态数组,UsbInterface[] usbInterface 数组既可以有手机对象也可有相机对象
  • 接口存在多态传递现象

内部类

类的五大成员之一[属性,构造器,方法,代码块,内部类]
一个类的内部嵌套了另一个类接口
在这里插入图片描述

局部内部类(有类名) and 匿名内部类(无类名)

局部内部类

  • 位置:在外部类 outer 的方法 f1() 的内部,可访问外部类所有成员
  • 不能加访问修饰符,但是可以加final修饰,本质是局部的类,地位是局部变量
  • 作用域:在定义的方法和代码块内
  • 外部类和局部内部类成员重名时,遵循就近原则,若要访问外部内成员,则用 外部类名.this.成员名

匿名内部类!!!重要

  • 定义在外部类的局部位置,没有类名,底层返回一个对象,命名为$xxx
  • new 类或接口(参数列表){ 类体 };
  • 基于接口:内部实现接口,但只用一次,用匿名内部类可简化代码;代码内部给匿名内部类会分配名称$xxx;编译类型是IA,运行类型是$xxx
  • -IA tiger = new IA(){ }; //IA是一个外部类外面写的接口
  • 基于类:编译类型是Father,运行类型是$xxx
  • -Father father = new Father("Jack"){ }
使用细节
  • 可直接调用方法
    • new 类或接口(参数列表){ 类体 }**.方法()**;
  • 不能添加访问修饰符,地位是局部变量
  • 外部其他类不能访问匿名内部类
  • 外部类和匿名内部类成员重名时,遵循就近原则,若要访问外部内成员,则用 外部类名.this.成员名
  • 当作实参传递,简洁高效 p498

成员内部类 and 静态内部类

成员内部类

  • 位置:在外部类的成员位置上【区别局部内部类】
  • 没有static修饰
  • 可添加访问修饰符【public,protected,default,private】
  • 可直接访问外部类所有成员,包括私有的
  • 外部其他类使用成员内部类
Outer outer = new Outer(); //外部类对象// 1
Outer.Inner inner = outer.new Inner()// 2 在外部类实现一个方法getInstance() return new Inner()
Outer.Inner inner outer.getInstance();
  • 外部类和成员内部类成员重名时,遵循就近原则,若要访问外部内成员,则用 外部类名.this.成员名

静态内部类

  • 位置:在外部类的成员位置上【区别局部内部类】
  • static修饰
  • 可添加访问修饰符【public,protected,default,private】
  • 可直接访问外部类静态成员,包括私有的;但不能访问非静态成员
  • 外部其他类使用成员内部类
Outer outer = new Outer(); //外部类对象// 1 因为是静态内部类,可通过类名直接访问(满足访问权限的前提)
Outer.Inner inner = new outer.Inner()// 2 在外部类实现一个方法getInstance() return new Inner()
Outer.Inner inner outer.getInstance();// 3 不创建外部对象,在外部类实现一个静态方法etInstance() return new Inner(),用类名直接访问创建 g
Outer.Inner inner = new Outer.getInner();
  • 外部类和静态内部类成员重名时,遵循就近原则,若要访问外部内成员,则用 外部类名.this.成员名

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

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

相关文章

nuxt.js框架使用swiper的5.4.5版本记录,创建广告位幻灯片

nuxt依赖 “nuxt”: “^2.15.8”, “swiper”: “^5.4.5”, “vue”: “^2.7.10”, “vue-awesome-swiper”: “^4.1.1”, 需要完成的效果是 参考地址&#xff1a;https://3.swiper.com.cn/demo/pcSlide/ nuxt代码&#xff1a; <template><div class"page&quo…

ServiceManger Binder的处理流程

陌生知识点如下&#xff1a; BinderProxy&#xff1a;是将Native层的BpBinder对象进行封装后传给Java层使用的Binder对象android_util_binder: Binder在JNI层的相关注册&#xff0c;处理&#xff0c;转换封装接口BpBinder:Binder驱动在Native层的封装。IPCThreadState&#xf…

机器学习的测试和验证(Machine Learning 研习之五)

关于 Machine Learning 研习之三、四&#xff0c;可到秋码记录上浏览。 测试和验证 了解模型对新案例的推广效果的唯一方法是在新案例上进行实际尝试。 一种方法是将模型投入生产并监控其性能。 这很有效&#xff0c;但如果你的模型非常糟糕&#xff0c;你的用户会抱怨——这…

Sentinel 控制台(集群流控管理)

规则配置 要通过 Sentinel 控制台配置集群流控规则&#xff0c;需要对控制台进行改造。我们提供了相应的接口进行适配。 从 Sentinel 1.4.0 开始&#xff0c;我们抽取出了接口用于向远程配置中心推送规则以及拉取规则&#xff1a; DynamicRuleProvider<T>: 拉取规则Dy…

jvm开启远程调试功能;idea远程debug

概述 有时候一些问题本地调试无法复现&#xff0c;这个时候可以开启jvm的远程调试功能 jar包启动 jdk8 java -agentlib:jdwptransportdt_socket,address8787,servery,suspendn -jar xxx.jarjdk11/17 java -agentlib:jdwptransportdt_socket,address*:8787,servery,suspe…

关于ios Universal Links apple-app-site-association文件 Not Found的问题

1. 背景说明 1.1 Universal Links 是什么 Support Universal Links 里面有说到 Universal Links 是什么、注意点、以及如何配置的。简单来说就是 当您支持通用链接时&#xff0c;iOS 用户可以点击指向您网站的链接&#xff0c;并无缝重定向到您安装的应用程序 大白话就是说&am…

APP爬虫之-Protobuf协议逆向解析

在做APP抓取时&#xff0c;会发现有的APP Response回来的数据有“加密”。不知道返回的内容是什么。 如下&#xff1a; 如上&#xff0c;内容不是明文的&#xff0c;没办法解析数据。APP常见的对数据加密有三种情况&#xff1a;第一种是&#xff0c;用诸如AES这类加密算法对数…

R语言绘图相关函数(含实例)

目录 plot:可用于创建多种类型的图形 dev.new():新建画板 hist&#xff1a;绘制直方图 dotchart&#xff1a;绘制点图的函数 pie:绘制饼图 pair&#xff1a;绘制散点图矩阵 boxplot&#xff1a;绘制箱线图 scatterplot3D&#xff1a; 绘制三维散点图 par&#xff1a;修…

【动态规划】1137. 第 N 个泰波那契数

Halo&#xff0c;这里是Ppeua。平时主要更新C&#xff0c;数据结构算法&#xff0c;Linux与ROS…感兴趣就关注我bua&#xff01; 文章目录 0. 题目解析1.算法原理1.1 状态表示1.2 状态转移方程1.3初始化1.4 填表顺序1.5 返回值 2.算法代码 &#x1f427; 本篇是整个动态规划的…

【八股】2023秋招八股复习笔记4(MySQL Redis等)

文章目录 目录1、MySQLmysql索引实现mysql索引优化mysql索引失效的情况mysql 千万数据优化mysql 事务隔离级别 & 实现原理mysql MVCC版本链&#xff08;undo log&#xff09;mysql数据同步机制 & 主从复制 &#xff08;binlog&#xff09;mysql 日志&数据恢复&…

Springboot开发所遇问题(持续更新)

SpringBoot特征&#xff1a; 1. SpringBoot Starter&#xff1a;他将常用的依赖分组进行了整合&#xff0c;将其合并到一个依赖中&#xff0c;这样就可以一次性添加到项目的Maven或Gradle构建中。 2,使编码变得简单&#xff0c;SpringBoot采用 JavaConfig的方式对Spring进行配置…

3D姿态相关的损失函数

loss_mpjpe: 计算预测3D关键点与真值之间的平均距离误差(MPJPE)。 loss_n_mpjpe: 计算去除尺度后预测3D关键点误差(N-MPJPE),评估结构误差。 loss_velocity: 计算3D关键点的速度/移动的误差,评估运动的平滑程度。 loss_limb_var: 计算肢体长度的方差,引导生成合理的肢体长度…

Redis通信协议

文章目录 Redis通信协议RESP协议数据类型 模拟Redis客户端 Redis通信协议 RESP协议 Redis是一个CS架构的软件&#xff0c;通信一般分为两步(不包含pipeline和PubSub)&#xff1a; 客户端(client)向服务端(server)发送一条命令。服务器解析并执行命令&#xff0c;返回响应结果…

Java面试题—2023年8月25日—PLKJ

2023年8月25日 北京 png ln kē j 答案仅供参考&#xff0c;博主仅记录发表&#xff0c;没有实际查询&#xff0c;不保证正确性。 面试题&#xff1a; 一.选择题 1.下面哪些是不合法的标识符 A.$persons B.TwoUsers C.*point D._endline 2. 下列语句执行后&#xff0c;k的值为…

Nginx 高级配置

目录 1 网页的状态页 2 Nginx 第三方模块 2.1 ehco 模块 3 变量 3.1 内置 3.2 定义变量 4 Nginx压缩功能 5 https 功能 6 自定义图标 1 网页的状态页 基于nginx 模块 ngx_http_stub_status_module 实现&#xff0c;在编译安装nginx的时候需要添加编译参数 --with-http…

Mysql with as定义子查询

文章目录 1. 定义2. 适用场景3. 语法4. 示例 1. 定义 使用with as 可以让子查询重用相同的with查询块&#xff0c; 并在select查询块中直接引用&#xff0c; 一般用在select查询块会多次使用某个查询sql时&#xff0c; 会把这个sql语句放在with as 中&#xff0c; 作为公用的表…

基于PaddleOCR2.7.0发布WebRest服务测试案例

基于PaddleOCR2.7.0发布WebRest服务测试案例 #WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. #警告&#xff1a;这是一个开发服务器。不要在生产部署中使用它。请改用生产WSGI服务器。 输出结果…

我的128天创作纪念日-东离与糖宝

文章目录 机缘收获日常成就憧憬 不知不觉我也迎来了自己的128天创作纪念日&#xff0c;一起来看看我有什么想对大家说的吧 机缘 我的写博客之旅始于参加了代码随想录算法训练营。在训练营期间&#xff0c;代码随想录作者卡尔建议我们坚持每天写博客记录刷题学习的进度和心得体…

K8s学习笔记3

Kubernetes功能&#xff1a; Kubernetes是一个轻便的可扩展的开源平台&#xff0c;用于管理容器化应用和服务。通过Kubernetes能够进行应用的自动化部署和扩缩容。在Kubernetes中&#xff0c;会将组成应用的容器组合成一个逻辑单元以更易管理和发现。Kubernetes积累了作为Goog…

stm32之USART(总结)

串行通信 UART串口内部结构示意图 普中科技的详细介绍 中断知识补充 代码 #ifndef __USART_H #define __USART_H #include "stdio.h" #include "stm32f10x_usart.h" #define USART1_REC_LEN 200 //定义最大接收字节数 200extern u8 USART1_RX_BUF[US…