Java基础知识--12

目录

一、final的使用

二、接口

1.概述

2.与抽象类的异同

3.具体使用 

4.内部类

成员内部类

静态内部类

局部内部类


一、final的使用

描述:final是最终的,不可改变的含义;可以修饰在类,方法,变量中

修饰类: 该类不能被继承

修饰方法:该方法不能被重写

修饰变量:变量变为常量
        1.修饰成员变量--成员常量
            赋值方式:a.直接赋值  b.动态代码块 c.构造方法
        2.修饰静态变量--静态常量(状态值-做判断)
            赋值方式:a.直接赋值   b.静态代码块
        3.修饰局部变量
            a.基本类型局部变量:值不可变

            b.引用类型局部变量:地址不可变

二、接口

1.概述

描述:接口是特殊的抽象类;

特殊性:可以看成抽象的事物;没有继承关系,但是有相应的应用场景---多态

接口中的方法也是抽象的,需要通过实现类来完成

定义接口:interface 接口名 定义实现类: 类 implements 接口

2.与抽象类的异同

相同点:

都可以生成class文件

都不能实例化对象

可以作为引用类型来使用(多态)

都可以调用Object(祖宗类)的方法--继承性

不同点:

接口中定义的属性都是公开的静态常量

接口中定义的方法都是公开的抽象方法

接口中不能有构造方法,没有动态代码块和静态代码块

3.具体使用 

面向接口的好处:扩展性,维护性更强; 更容易更换具体实现;解耦合性更强

耦合性:类与类的联系很紧密;解耦合就是为了让类之间的关系更独立一些---代码分离性更好

接口传参多态,与抽象类传参多态类似;就是将接口引用通过参数形式接收实现类对象;

哪个实现类对象传给接口引用,接口引用则调用该实现类重写方法-----接口回调

接口实现多态的应用场景2:传参的多态---作为某种标准或约定来使用

结论:接口的应用就是多态的应用,参考抽象类实现多态即可

4.内部类

概述:在一个类的内部,又包含了一个完整的类;这个完整的类就是内部类

特点:

内部类也会生成独立的class文件

在内部类中可使用外部类的私有成员,而不破坏封装性

可以将外部类的一些功能交给内部类来完成

内部类可以分为:成员内部类,静态内部类,局部内部类(了解), 匿名内部类(常用)

成员内部类
//将外部内的求和功能交给内部类来完成
class Outter{  //外部类private String name="张三疯";public int add(int a,int b) {return new Inner().addFun(a,b);}class Inner{ //成员内部类private String name="张无忌";//private static int age; //在成员内部类中不能使用static;除非静态常量public int addFun(int a, int b) {//可以直接使用外部类的私有成员; 重名时作用域小的优先System.out.println(name);  //张无忌System.out.println(Outter.this.name);  //张三疯return a+b;  //场景:将某些功能,交给内部类完成}  }
}
public class Test1 {public static void main(String[] args) {//Outter out = new Outter();//System.out.println(out.add(1, 2)); //调用外部类方法,完成功能//直接调内部类的方法: 通过外部类对象才能new内部类Outter.Inner inner = new Outter().new Inner();System.out.println(inner.addFun(2, 3));}
}
静态内部类

描述:在内部类中加static修饰

import com.qf.d_inner.A.B;  //需要导入静态内部类的包
//静态内部类案例
class A{private int age = 30;  //外部类的私有成员static class B{  //静态内部类static String name; //在静态内部类中,可以定义静态成员public void show() {//System.out.println(age); //静态内部类中,不能使用外部类属性--加载时机System.out.println("静态内部类中的方法调用");}}
}
public class Test2 {public static void main(String[] args) {//实例化静态内部类方式1:A.B b = new A.B(); //static的资源需要类来调b.show();//简化方式:B b2 = new B();b2.show();}
}
局部内部类

描述:局部内部类,就是在外部类的方法体中定义的内部类;在外面无法调用,只能在当前方法体中调用

局部内部类不能加public修饰

class AA{public void show() {//局部内部类--不常用,外部调不出来int age = 3; //在局部内部类中使用局部变量时会变为常量+final//原因:为了保证在内部类中局部变量作用域的一致性,才自动+finalclass BB{ //外部类的方法体中定义的局部内部类public void test() {System.out.println("局部内部类..."+age);}}new BB().test(); //在外部内的方法体中调用局部内部类功能}
}
public class Test3 {public static void main(String[] args) {new AA().show();}
}

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

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

相关文章

蓝桥杯备战刷题one(自用)

1.被污染的支票 #include <iostream> #include <vector> #include <map> #include <algorithm> using namespace std; int main() {int n;cin>>n;vector<int>L;map<int,int>mp;bool ok0;int num;for(int i1;i<n;i){cin>>nu…

玩转ChatGPT:参考文献速查

一、写在前面 各位大佬&#xff0c;我又回来了&#xff0c;最近2月太忙啦&#xff08;过年、奶娃、本子、材料、结题&#xff09;&#xff0c;断更了。现水一篇证明我还活着&#xff01;&#xff01;&#xff01; 最近在写国自然本子&#xff0c;遇到一个估计大家都会遇到的问…

QT调用批处理命令及外部exe方法

一.QT调用外部exe 使用QT中的QProcess方法&#xff1a; #include <QProcess> QProcess process; QString cmd "test.exe"; //放在主程序exe同级目录下 process.start(cmd); // 启动可执行程序方法一 //process.startDetached(cmd); // 启动可执行程序方法…

Unity将4个纹理图拼接成1个纹理

需要的效果 最终实现的效果大概如下: 4个贴图上去 这里随便放一个切分的图。 Shader代码如下 直接上代码: // Unity built-in shader source. Copyright (c) 2016 Unity Technologies. MIT license (see license.txt)// Unlit shader. Simplest possible textured shad…

UE5 C++ Widget练习 Button 和 ProgressBar创建血条

一. 1.C创建一个继承Widget类的子类&#xff0c; 命名为MyUserWidget 2.加上Button 和 UserWidget的头文件 #include "CoreMinimal.h" #include "Components/Button.h" #include "Blueprint/UserWidget.h" #include "MyUserWidget.genera…

基于SVM的功率识别,基于支持向量机的功率识别,基于SVM的工况识别,svm工具箱详解

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 完整代码和数据下载链接:基于SVM的功率识别,基于支持向量机的功率识别资源-CSDN文库 https://download.csdn.net/download/abc991835105/88862793 SVM应用实例, 基于SVM的功…

「连载」边缘计算(二十一)02-26:边缘部分源码(源码分析篇)

&#xff08;接上篇&#xff09; DeviceTwin struct组成剖析 该部分对DeviceTwin struct的组成进行剖析。接着devicetwin struct调用链剖析的实例化DeviceTwin struct&#xff08;dt : DeviceTwin{}&#xff09;往下剖析&#xff0c;进入DeviceTwin struct的定义&#xff0c;…

编程笔记 Golang基础 033 反射的类型与种类

编程笔记 Golang基础 033 反射的类型与种类 一、反射的类型和种类二、切片与反射三、集合与反射四、结构体与反射五、指针与反射六、函数与反射小结 反射机制的作用范围涵盖了几乎所有的类型和值的操作层面&#xff0c;它极大地增强了Go语言在运行时对于自身类型系统的探索和操…

Python实现自动检测设备连通性并发送告警到企业微信

背景&#xff1a;门禁机器使用的WiFi连接&#xff0c;因为某些原因会不定期自动断开连接&#xff0c;需要人工及时干预&#xff0c;以免影响门禁数据同步&#xff0c;故写此脚本&#xff0c;定时检测门禁网络联通性。 #首次使用要安装tcping模块 pip install tcpingfrom tcpin…

Pandas读取两个excel并join

Pandas 的 join就是merge&#xff0c;代码如下 import pandas as pd #读取两张表 dfpd.read_excel(“左表”) #读取右表的第三个sheet中的数据 df2pd.read_excel(“右表”,sheet_name“Sheet3”) #以左表为主表&#xff0c;左连接 outpd.merge(df ,df2 ,on‘query’ ,how‘lef…

【学习笔记】Serdes中的高速接口设计

参考文献&#xff1a; 一、绪论 1.1 背景 “串行替代并行”&#xff1a; 串行传输使用差分信号传输以传输更长距离&#xff1b; 并行传输因串扰无法长距离传输&#xff1b;并行线路对信号偏斜量的要求&#xff0c;限制了最大的传输速率。 SerDesSerializer Deserializer S…

欧拉函数性质和快速幂算法及python实现

目录 欧拉函数 快速幂算法 快速模幂算法 欧拉函数 两个不同的正整数a,b&#xff0c;若gcd(a,b)1,则a和b互质&#xff0c;1与任何正整数都互质 欧拉函数的意义 φ(n) 表示小于或等于正整数n的所有正整数中与n互质的数的个数 如φ(32) 16&#xff0c;即小于32的数中有16个…

Prompt 编程的优化技巧

一、为什么要优化 一&#xff09;上下文限制 目前 GPT-3.5 以及 GPT-4最大支持 16K 上下文&#xff0c;比如你输入超过 16k 的长文本&#xff0c;ChatGPT 会提示文本过大&#xff0c;为了避免 GPT 无法回复&#xff0c;需要限制 上下文在16k 以内 上下文对于 GPT 来说是非常重…

STL常用容器(vector容器)---C++

STL常用容器目录 2.vector容器2.1 vector基本概念2.2 vector构造函数2.3 vector赋值操作2.4 vector容量和大小2.5 vector插入和删除2.6 vector数据存取2.7 vector互换容器2.7.1 vector互换容器收缩内存空间 2.8 vector预留空间 2.vector容器 2.1 vector基本概念 功能&#xf…

自然语言处理(NLP)—— 神经网络自然语言处理(2)实际应用

本篇文章的第一部分是关于探索词嵌入&#xff08;word embedding&#xff09;向量空间。词嵌入是一种语言模型和文本表示技术&#xff0c;其中单词或短语从词汇表被映射到向量的高维空间中。通过这种方式&#xff0c;可以通过计算向量之间的距离来捕捉单词之间的语义关系。 1.…

AttributeError: module ‘tensorflow‘ has no attribute ‘__version__‘

可能的原因是环境中安装了与标准TensorFlow包不同的包&#xff0c;或者可能是TensorFlow没有正确安装。解决方法如下&#xff0c;亲测有效 pip install --upgrade --force-reinstall tensorflow–force-reinstall&#xff1a;通常&#xff0c;如果已经安装了请求的包的最新版本…

PyQt 逻辑与界面分离

将逻辑与界面分离是一种良好的软件设计实践&#xff0c;可以提高代码的可维护性和可扩展性。在使用 pyuic 工具转换 Qt Designer 的 .ui 文件时&#xff0c;你可以通过以下方式实现逻辑与界面的分离&#xff1a; 创建一个单独的 Python 模块&#xff0c;用于编写主窗口的逻辑代…

2024-02-23(Spark)

1.RDD的数据是过程数据 RDD之间进行相互迭代计算&#xff08;Transaction的转换&#xff09;&#xff0c;当执行开启后&#xff0c;代表老RDD的消失 RDD的数据是过程数据&#xff0c;只在处理的过程中存在&#xff0c;一旦处理完成&#xff0c;就不见了。 这个特性可以最大化…

技术社区项目—借助Logback 的扩展机制实现异常感知并进行邮件推送异常信息

使用 Logback 的扩展机制实现异常感知并进行邮件发送的流程可以分为以下几个步骤&#xff1a; 引入 Logback 依赖: 首先确保项目中引入了 Logback 的相关依赖&#xff0c;可以通过 Maven、Gradle 或其他构建工具来管理依赖。编写自定义 Appender: 创建一个自定义的 Logback Ap…

七、ChatGPT为什么会被热炒?

2023年上半年&#xff0c;ChatGPT引起了广泛的热议&#xff0c;对于ChatGPT有多热&#xff0c;不需要我重复了&#xff0c;你可能在网上看到了很多报道&#xff0c;标题如《ChatGPT揭开AI战幔&#xff1a;杀死黄页一样摧毁Google&#xff1f;》和《ChatGPT强势来袭&#xff0c;…