韩顺平0基础学java——第20天

news2024/11/15 15:33:16

p407-429

接口

一个类可以实现多个接口(电脑上可以有很多插口)

class computer IB,IC{}

接口中的属性只能是final,并且是public static final

接口不能继承其他类,但是可以继承多个别的接口

interface ID extends IB,IC{}

接口的修饰符只能是默认或者public

接口和继承

接口感觉就是实现多继承啊,利用接口来学习。接口就是对单继承机制的补充。

class LittleMonkey extends Monkey implements Fishable,Birdable { }

父子关系和师徒关系,接口更灵活。

解耦:即接口规范性+动态绑定

接口的多态特性

用接口作为形参,传进来的是对象实例。相当于向上转型。

当需要调用特有的功能时:

可以通过向下转型来调用。

接口的多态传递

接口类型的变量可以指向实现了该接口的类对象的实例

接口是可以继承的。这里IG继承了IH接口,而Teacher类实现了IG接口,相当于Teacher类也实现了IH接口。

课堂练习

跑了一下失败了,相当于接口里的【public static final int x =0】和父类的x冲突了。(它们是同级的?)

当我要访问接口中的x可以用A.x,当我访问父类的x就用super.x

内部类(重点)

一个类的内部,又完整嵌套了另一个类的结构,被嵌套的类成为内部类(inner class)

嵌套其他的类被称为外部类(outer class)。

跟他们没关系的类就是外部其他类

注意:类的五大成员

1.属性

2.方法

3.构造器

4.代码块

5.内部类

内部类的最大特点:可以直接访问私有属性,并且可以体现类之间的包含关系。

内部类可以无限套娃。

内部类有四种:

1.局部内部类

1.可以直接访问外部类的所有成员,包含私有的

2.不能添加访问修饰符,因为它的地位就是一个局部变量,局部变量是不能使用访问修饰符的。但是可以使用final,因为局部变量也可以final

3.作用域:仅仅在定义它的方法或者代码块中

4.局部内部类--访问-->外部类的成员【访问方式:直接访问】

5.外部类--访问-->局部内部类的成员【访问方式:创建对象,再访问。注意要在作用域内,也就是说,外部类在方法中创建内部类,再调用】

记住:局部内部类是定义在方法或者代码块中,它的作用域在方法体或者代码块,本质仍然是个类

6.外部其他类不能访问局部内部类

7.如果外部类和局部内部类的成员重名时,遵守就近原则。如果要调用外部类的变量,使用类名.this.成员名。

        比如:

        public class Outer{

                private int n1 = 1;

                class Inner{

                private int n1 =2;

                public void f1(){

                       sout(“n1=”+n1+“外部类的n1=”+Outer.this.n1);

                }                

        }

}

注意,这里的Outer.this本质是外部类的对象,即哪个对象调用了f1方法,那么this就指向了哪个对象

2.匿名内部类(anonymous,重要!!!)

匿名内部类就是定义在外部类的局部位置,比如方法中,并且没有类名。本质:1.是类,2.定义在外部类的局部 3.该类没有名字(其实有名字,但是是系统给分配的,我看不到)。4.匿名内部类同时还是个对象。

语法:

new 类或接口(参数列表){

        类体

}

记得加分号!!

基于接口的匿名内部类

这里的tiger的编译类型是IA接口,运行类型就是匿名内部类!

底层:class XXXX implements IA{

实现接口方法}

这儿XXXX的名称是

类名中的$就是系统分配的类名。

匿名内部类使用一次,就不能再使用。但是这个对象里的方法可以一直调用哈!(类没了,对象还在...时间过去了,照片还在?)

基于类的匿名内部类

new Father(){};加上这个大括号就不一样了!

这个f的编译类型是Father,但是运行类型是Feiju$1

注:如果是基于抽象类的匿名内部类,需要实现那些抽象方法

细节

1.动态绑定机制

2.即是个类也是个对象,可以直接调用

这里甚至能直接调用

3.不能添加访问修饰符

4.作用域在方法或者代码块之中

5.外部其他类不能访问匿名内部类

6.如果外部类的成员和匿名内部类的成员重名时,匿名内部类访问的话遵从就近原则,如果想访问外部类的成员,则可以使用(外部类名。this。成员)去访问。

匿名内部类使用

把匿名内部类当做实参传递

记得打分号。再f1的参数列表里直接new

3.成员内部类

成员内部类是定义在外部类的成员位置,并且没有static修饰的。(否则就是静态内部类)

1.可以直接访问外部类的所有成员

2.可以添加任意的访问修饰符(public、默认、protected、private),毕竟它是个成员

3作用域:和外部类的其他成员一样,为整个类体。

4成员内部类访问外部类是直接访问的

5外部类访问内部类是创建对象再访问

6外部其他类访问

        6.1外部类的对象去new一个内部类实例:相当于把new Inner08()当做是Outer08的成员

        

        6.2在外部类中,编写一个方法来返回内部类

        

7.如果外部类和内部类的成员重名了,内部类访问的话,默认遵循就近原则,如果想访问外部类的成员,则可以使用(外部类名.this.成员)去访问

4.静态内部类

静态内部类是定义在外部类的成员位置,并且有static修饰

1.可以直接访问外部类的所有静态成员,包括私有的。但是不能直接访问非静态成员!

2.可以添加任意访问修饰符,因为它的地位就是一个成员。

3.作用域:和其他成员一样,为整个类体

4.可以通过外部类名直接访问,需要满足访问权限

例:

注意:重名了不用加this了,因为静态内部类也只能访问外部的静态属性,这种属性直接类名调用


到这里面向对象就讲完了


枚举类

1.枚举是一组常量的集合

2.枚举属于一种特殊的类,里面只包含一组有限的特定对象

static+final不会导致类加载!

使用enum关键字实现枚举类

1.使用关键字enum替代class

2.public static final Enu1 SPRING = new Enu1(“春天”,“温暖”);改成

        SPRING(“春天”,“温暖”);

即 常量名(实参列表)

3.如果有多个常量对象,使用逗号间隔:

SPRING(“春天”,“温暖”),SUMMER(“夏天”,“热”);

4.如果使用enum来实现枚举,要求定义常量对象,写在最前面。

enum关键字注意事项

javap指令:反编译。

1当我们使用enum关键字来开发一个枚举类时,默认会final继承Enum类。使用javap工具来证明

Enum类的toString方法是return name

2.传统的public static final Season2 SPRING = new Season2(“春天”,“温暖”)简化成

SPRING(“春天”,“温暖”),这里必须知道,它调用的是哪个构造器

3如果使用无参构造器创建创建枚举对象,则实参列表和小括号都可以省略。

4.当有多个枚举对象时,使用逗号间隔。

5.枚举必须放在行首

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

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

相关文章

【PX4-AutoPilot教程-TIPS】离线安装Flight Review PX4日志分析工具

离线安装Flight Review PX4日志分析工具 安装方法 安装方法 使用Flight Review在线分析日志,有时会因为网络原因无法使用。 使用离线安装的方式使用Flight Review,可以在无需网络的情况下使用Flight Review网页。 安装环境依赖。 sudo apt-get insta…

Rust基础学习-标准库

栈和堆是我们Rust代码在运行时可以使用的内存部分。Rust是一种内存安全的编程语言。为了确保Rust是内存安全的,它引入了所有权、引用和借用等概念。要理解这些概念,我们必须首先了解如何在栈和堆中分配和释放内存。 栈 栈可以被看作一堆书。当我们添加更…

数据库错误[ERR] 1071 - Specified key was too long; max key length is 1000 bytes

环境:phpstudy的mysql8 索引长度问题: 试了很多解决办法,例如需改配置: set global innodb_large_prefixON; set global innodb_file_formatBARRACUDA; 试了还是有问题,直接启动不了了。因为mysql8取消了这个配置。…

Linux操作系统学习:day02

内容来自:Linux介绍 视频推荐:[Linux基础入门教程-linux命令-vim-gcc/g -动态库/静态库 -makefile-gdb调试]( day02 5、Linux目录结构 操作系统文件结构的开始,只有一个单独的顶级目录结构,叫做根目录。所有一切都从“根”开始…

DHCP原理与配置(Linux)

目录 DHCP概念 使用DHCP的好处 DHCP的分配方式 DHCP租约过程 租约过程分4个步骤(全过程广播) 1. 客户机请求IP(Discover:发现;客户端广播 发送一个数据包,其他主机也能接收到,如果是没有安…

34.打印K型

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/76 题目描述 小爱想用 * 打出一个大写的 K。…

边缘计算采集网关解决方案:为企业提供高效、灵活的数据处理方案-天拓四方

一、企业背景 某大型制造企业,位于国内某经济发达的工业园区内,拥有多个生产线和智能化设备,致力于提高生产效率、降低运营成本。随着企业规模的扩大和生产自动化的推进,该企业面临着海量数据处理、实时响应和网络安全等多重挑战…

P4. 微服务: 匹配系统(上)

P4. 微服务: 匹配系统 上 Tips0 概述1 匹配系统流程2 游戏系统流程3 websocket 前后端通信的基础配置3.1 websocket 的需要的配置3.2 websocket 连接的建立3.3 为 websocket 连接添加 jwt 验证 4 实现匹配界面和对战界面的切换5 匹配系统的客户端和 websocket 后端交互部分5.1 …

启明智显工业级HMI芯片Model3功耗特性分享

前言: 【启明智显】专注于HMI(人机交互)及AIoT(人工智能物联网)产品和解决方案的提供商,我们深知彩屏显示方案在现代物联网应用中的重要性。为此,我们一直致力于为客户提供彩屏显示方案相关的技…

MySQL系列-语法说明以及基本操作(一)

1、前言 主要讲解MySQL的基本语法 官网文档 https://docs.oracle.com/en-us/iaas/mysql-database/doc/getting-started.html 关于MySQL的基本语法,关于数据类型、表的操作、数据操作、事务、备份等,可参考 http://www.voidme.com/mysql 2、数据类型 数…

ARM32开发--PWM高级定时器

目录 文章目录 前言 目标 学习内容 需求 高级定时器通道互补输出 开发流程 通道配置 打开互补保护电路 完整代码 练习题 总结 前言 在嵌入式软件开发中,PWM(脉冲宽度调制)技术被广泛应用于控制各种电子设备的亮度、速度等参数。…

STM32驱动带编码器的直流减速电机

STM32驱动带编码器的直流减速电机 文章目录 STM32驱动带编码器的直流减速电机硬件材料MG310 直流减速电机直流电机原理减速器实物接线霍尔编码器 TB6612电机驱动接线说明程序设计定时器生成PWM驱动电机速度计算 实验结果程序下载 硬件材料 主控板:STM32F407ZG直流减…

【漏洞复现】WVP视频平台未授权漏洞

漏洞描述: WVP视频平台api/user存在未授权访问漏洞,攻击者可利用漏洞获取当前系统管理员用户名及密码进行登录系统。 搜索语法: Fofa-Query: body"国标28181" 漏洞详情: 1.WVP视频平台。 2.POC: GET /api/user/all HTTP/1.1 …

Redis项目中竟然有这么多种使用场景!!

下面蜗牛哥依次对Redis 15种业务场景举例说明和解释: 1. 排行榜和计数器 针对Redis作为排行榜和计数器的使用场景,下面是一个Java Spring Boot应用的案例,其中使用Redis来实现一个简单的文章点赞功能,并将点赞数用作排行榜的依据…

Django UpdateView视图

UpdateView是Django中的一个通用视图,用于处理对象的更新操作。它允许用户更新一个已经存在的对象。UpdateView通常与一个模型表单一起使用,这样用户就可以看到当前对象的值,并可以修改它们。 1,添加视图 Test/app3/views.py fr…

什么是覆盖索引 ?

走当前索引就足够,而无需回表就能找到所有数据,就叫覆盖索引。 比如 key1 上有索引。(它是一个普通的二级索引)。 那么select key1 from s1 where key1 a 这种就叫覆盖索引。 表现就是explain时, Extra 那里显示 …

鸿蒙开发文件管理:【@ohos.fileio (文件管理)】

文件管理 该模块提供文件存储管理能力,包括文件基本管理、文件目录管理、文件信息统计、文件流式读写等常用功能。 说明: 本模块首批接口从API version 6开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 impor…

AI创意广告案例分析️可口可乐、麦当劳、伊利、钟薛高等一线品牌各显神通

AI 相关的教学我们最近做了不少分享,本期计育韬老师则希望和广告人们谈一谈具体的落地案例应用及其内在创意方法论。结合在 Midjourney 频道 LV.14 的部分创作经验,相信能为广大品牌方带来 AI 广告创作的启迪。 担心版权争议? 那就主打 UG…

分离轴定理:凸多边形相交检测算法

分离轴定理(Seperating Axis Theorem)是一种确定两个凸多边形是否相交的方法。该算法还可用于查找最小穿透向量,这对于物理模拟和许多其他应用非常有用。SAT 是一种快速通用算法,可以消除对每个形状类型对进行碰撞检测代码的需求&…

在Vue2和Vue3中ECharts如何使用,详细步骤,ref,$ref。echarts官网。

不管是在vue2中还是在vue3中其实本质上的原理和步骤都是一样的,只是语法可能有所不同。 为了方便大家看起乱,vue2和vue3我分开写。 echarts官网: https://echarts.apache.org/zh/index.html Vue2篇: 1.导入echarts包&#xf…