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

news2024/9/24 1:19:59

抽象类 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.coloradmin.cn/o/931006.html

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

相关文章

C语言指针入门详解

一、指针简介 指针(Pointer)是C语言的一个重要知识点,其使用灵活、功能强大,是C语言的灵魂指针与底层硬件联系紧密,使用指针可操作数据的地址,实现数据的间接访问指针就是地址,通过访问此地址来获取该地址存储的数据 …

AIGC人工智能涉及三十六职业,看看有没有你的职业(一)

文章目录 一只弹吉他的熊猫 神奇的企鹅 功夫熊猫 视觉光影下的女子 闪光灯效 局部柔光 生物光 LOGO设计 制作儿童绘本故事 换脸艺术 打造专属动漫头像 包装设计之美 建筑设计 如何转高清图 生成3D质感图标 生成微信表情包 探索美食摄影的奇妙之旅 蛋糕创意设…

docker-compose管理创建LNMP服务并运行Wordpress网站平台

文章目录 一.项目环境1. 环境描述2.项目需求 二.部署过程1.安装Docker2.安装Docker加速器3.Docker-Compose安装部署4.准备依赖文件、配置nginx5.配置mysql6.配置php7.编写docker-compose.yml8.验证 三.容器快照,然后将Docker镜像打包成tar包备…

Wireshark流量分析

目录 1.基本介绍 2.基本使用 1)数据包筛选: 2)筛选ip: 3)数据包还原 4)数据提取 3.wireshark实例 1.基本介绍 在CTF比赛中,对于流量包的分析取证是一种十分重要的题型。通常这类题目都是会提供一个包含…

Config:服务端连接Git配置

创建子模块 Pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org…

<C++> 内存管理

1.C/C内存分布 让我们先来看看下面这段代码 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] {1, 2, 3, 4};char char2[] "abcd";char *pChar3 "abcd";int *ptr1 (int *) mal…

Spring Cloud 2022.x版本使用gateway和nacos实现动态路由和负载均衡

文章目录 1、nacos下载安装1.1、启动服务器1.2、关闭服务器1.3、服务注册&发现和配置管理接口 2、代码示例2.1、app1工程代码2.2、app2工程代码2.3、gateway网关工程代码 3、动态配置网关路由3.1、配置动态路由3.2、配置为负载模式 4、gateway配置规则4.1、请求转发&#x…

PADS layout 使用记录-封装name

1. 元件封装添加位号等标签 pads layout中封装的name不见了&#xff0c;好久不知道怎么添加回来&#xff0c;终于找到了“添加新标签” 按钮&#xff1a; 点击之后&#xff0c;在这里直接设置就好了

RK3588开发板编译环境Ubuntu20.04编译配置增加交换内存

迅为提供的编译环境 Ubuntu20.04 默认配置了交换内存是 9G&#xff0c;如果在编译过程中&#xff0c;因内 存不够而编译报错&#xff0c;可以参考本小节进行设置。 这里举例分配 5G 交换内存。 在开始之前&#xff0c;使用命令检查一下您的 ubuntu 的 swap 分区。 sudo swa…

DataFun:推荐系统峰会

工程架构与训练推理 TFDE 多场景多目标融合 企业知识推荐系统 ATA内部社区 房产推荐场景的算法实践

智驾算力芯片市场仍处于「波动」周期,Momenta曝光自研NPU

用「冷热不均」来形容当下的汽车芯片赛道&#xff0c;再合适不过了。 本周&#xff0c;英伟达公布的第二财季&#xff08;5-7月&#xff09;营收达到创纪录的135亿美元&#xff0c;大幅超出了此前市场普遍预期的略高于110亿美元&#xff0c;同比增速更是达到了101%。 其中&…

AIGC人工智能涉及三十六职业,看看有没有你的职业(二)

文章目录 如何生成IP盲盒 设计儿童节海报 制作商用矢量插画 设计徽章 图片融合 后缀参数 Stylize 风格化 赛博朋克头像 中国风瓷娃娃 生成线稿 制作时尚音乐唱片封面 T恤图案设计-告白气球 引领时尚潮流的服装设计之旅 独一无二的包包奇迹 手机壳设计探险 如何生…

c#写的端口监听,程序退出后,再次运行提示端口占用,且进程不存在

我用c#写了一个监听29999端口,进程结束后再次启动发现端口被占用&#xff0c;但是运行netstat -ano | findstr 29999找到进程ID后&#xff0c;却没有这个进程 经查询这个监听29999进程虽然没了&#xff0c;但是要找到他的父进程&#xff0c;把父进程关闭了才可以&#xff0c;参…

骨传导耳机值得入手吗?盘点最值得入手的几款骨传导耳机

无线耳机最近一两年越来越受欢迎&#xff0c;市场上不同形态的耳机品类让人眼花缭乱&#xff0c;从骨传导&#xff0c;夹耳式到气传导等等都有&#xff0c;尤其是不用入耳佩戴的耳机&#xff0c;不伤耳朵&#xff0c;佩戴更舒适更安全&#xff0c;而骨传导耳机可以说是近几年来…

c++中i++和++i的区别

结论 1. i 是两步操作&#xff0c;第一步&#xff1a;a i 第二步&#xff1a;i i1&#xff0c;最终返回a&#xff0c;但a是不具名的&#xff0c;也无法取地址 2. i 也是两步操作&#xff0c;第一步&#xff1a;i i1 第二步&#xff1a;return i&#xff0c;最终返回…

pywebview 通过 JSBridge 调用 TTS

pip install pywin32 ; pip install pywebview ; 通过 JSBridge 调用本机 TTS pip install cefpython3 cefpython3-66.1-py2.py3-none-win_amd64.whl (69.0 MB) Successfully installed cefpython3-66.1 编写 pywebview_tts.py 如下 # -*- coding: utf-8 -*- ""&…

vscode | 开发神器vscode自定义用户代码片段

目录 一、增加二、删除三、语法四、变量 一、增加 点击&#xff1a;左下角设置齿轮按钮——>用户代码片段 点击&#xff1a;新建全局代码片段文件 输入文件名 会出现如下界面 配置以下语句 "cls": {"scope": "javascript,typescript",…

(学习笔记-调度算法)磁盘调度算法

磁盘结构&#xff1a; 常见的机械磁盘是上图左边的样子&#xff0c;中间圆的部分是磁盘的盘片&#xff0c;一般会有多个盘片&#xff0c;每个盘面都有自己的磁头。右边的图就是一个盘片的结构&#xff0c;盘片中的每一层分为多个磁道&#xff0c;每个磁道分为多个扇区&#xff…

C++:命名空间,缺省参数,函数重载,引用,内联函数

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》 文章目录 前言一、命名空间命名空间的定义命名空间的使用 二、缺省参数缺省参数概念缺省参数分类 三、函数重载函数重载的概念 四、引用引用的概念引用特性引用的使用场景引用与指针的区别 …

【中危】Spring Kafka 反序列化漏洞 (CVE-2023-34040)

zhi.oscs1024.com​​​​​ 漏洞类型反序列化发现时间2023-08-24漏洞等级中危MPS编号MPS-fed8-ocuvCVE编号CVE-2023-34040漏洞影响广度小 漏洞危害 OSCS 描述Spring Kafka 是 Spring Framework 生态系统中的一个模块&#xff0c;用于简化在 Spring 应用程序中集成 Apache Kaf…