【Java】final关键字&权限修饰符&内部类&引用类型用法

举报
陶然同学 发表于 2022/08/21 01:02:11 2022/08/21
【摘要】 🔎这里是【Java】,关注我学习Java不迷路 👍如果对你有帮助,给博主一个免费的点赞以示鼓励 欢迎各位🔎点赞👍评论收藏⭐️ 👀专栏介绍 【Java】 目前主要更新Java,一起学习一起进步。 👀本期介绍 本期主要介绍final关键字&权限修饰符&内部类&引用类型用法 文章目录 1. ...

🔎这里是【Java】,关注我学习Java不迷路
👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

👀专栏介绍

【Java】 目前主要更新Java,一起学习一起进步。

👀本期介绍

本期主要介绍final关键字&权限修饰符&内部类&引用类型用法

文章目录

1. final关键字

1.1 概述

1.2 使用方式

2. 权限修饰符

2.1 概述

2.2 不同权限的访问能力

3. 内部类

3.1 概述

3.2 匿名内部类【重点】

4. 引用类型用法总结

4.1 class作为成员变量

4.2 interface作为成员变量

4.3 interface作为方法参数和返回值类型

1. final关键字

1.1 概述

学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能
不能随意的继承
API 中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况, Java 提供了
final 关键字,
用于修饰 不可改变 内容。
fifinal : 不可改变。可以用于修饰类、方法和变量。
类:被修饰的类,不能被继承。
方法:被修饰的方法,不能被重写。
变量:被修饰的变量,不能被重新赋值。

1.2 使用方式

修饰类
格式如下:
查询 API 发现像 public final class String public final class Math public final class Scanner
等,很多我们学习过的类,都是被 fifinal 修饰的,目的就是供我们使用,而不让我们所以改变其内
容。
修饰方法
格式如下:
重写被 final 修饰的方法,编译时就会报错。
修饰变量
1. 局部变量 —— 基本类型
基本类型的局部变量,被 fifinal 修饰后,只能赋值一次,不能再更改。代码如下:

思考,如下两种写法,哪种可以通过编译?
写法 1

 

写法2

根据 final 的定义,写法 1 报错!写法 2 ,为什么通过编译呢?因为每次循环,都是一次新的变量 c
这也是大家
需要注意的地方。
2. 局部变量 —— 引用类型
引用类型的局部变量,被 fifinal 修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内
部的成员变量值的
修改,代码如下:

 

3. 成员变量
成员变量涉及到初始化的问题,初始化方式有两种,只能二选一:
显示初始化;

 

 构造方法初始化。

fifinal修饰的常量名称,一般都有书写规范,所有字母都大写 

2. 权限修饰符

2.1 概述

Java 中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问
权限,
public :公共的。
protected :受保护的
default :默认的
private :私有的

2.2 不同权限的访问能力

可见, public 具有最大权限。 private 则是最小权限。
编写代码时,如果没有特殊的考虑,建议这样使用权限:
成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。
成员方法使用 public ,方便调用方法。
小贴士:不加权限修饰符,其访问能力与 default 修饰符相同

3. 内部类

3.1 概述

什么是内部类
将一个类 A 定义在另一个类 B 里面,里面的那个类 A 就称为 内部类 B 则称为 外部类
成员内部类
成员内部类 :定义在 类中方法外 的类。
定义格式:

在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。比如,汽车类 Car
中包含发动机
Engine ,这时, Engine 就可以使用内部类来描述,定义在成员位置。
代码举例:

 

访问特点
内部类可以直接访问外部类的成员,包括私有成员。
外部类要访问内部类的成员,必须要建立内部类的对象。
创建内部类对象格式:

 

访问演示,代码如下:
定义类:

 

定义测试类:

内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的 .class 文件,但是前面冠以外
部类的类名
$ 符号 。
比如, Person$Heart.class

3.2 匿名内部类【重点】

匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的
类对象
开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下
几步操作,
1. 定义子类
2. 重写接口中的方法
3. 创建子类对象
4. 调用重写后的方法

我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类
就是做这样的快
捷方式。
前提
匿名内部类必须 继承一个父类 或者 实现一个父接口

格式

使用方式

以接口为例,匿名内部类的使用,代码如下:
定义接口:

创建匿名内部类,并调用:

通常在方法的形式参数是接口或者抽象类时,也可以将匿名内部类作为参数传递。代码如下:

以上两步,也可以简化为一步,代码如下:

 

4. 引用类型用法总结

实际的开发中,引用类型的使用非常重要,也是非常普遍的。我们可以在理解基本类型的使用方式
基础上,进一步
去掌握引用类型的使用方式。基本类型可以作为成员变量、作为方法的参数、作为方法的返回值,
那么当然引用类
型也是可以的。

4.1 class作为成员变量

在定义一个类 Role (游戏角色)时,代码如下:
使用 int 类型表示 角色 id 和生命值,使用 String 类型表示姓名。此时, String 本身就是引用类型,
由于使用
的方式类似常量,所以往往忽略了它是引用类型的存在。如果我们继续丰富这个类的定义,给
Role 增加武器,穿
戴装备等属性,我们将如何编写呢?
定义武器类,将增加攻击能力:

 

定义穿戴盔甲类,将增加防御能力,也就是提升生命值:

 定义角色类:

测试类:

 类作为成员变量时,对它进行赋值的操作,实际上,是赋给它该类的一个对象。

4.2 interface作为成员变量

接口是对方法的封装,对应游戏当中,可以看作是扩展游戏角色的技能。所以,如果想扩展更强大
技能,我们在
Role 中,可以增加接口作为成员变量,来设置不同的技能。
定义接口:

定义角色类:

 定义测试类:

我们使用一个接口,作为成员变量,以便随时更换技能,这样的设计更为灵活,增强了程序的扩展
性。
接口作为成员变量时,对它进行赋值的操作,实际上,是赋给它该接口的一个子类对象。

4.3 interface作为方法参数和返回值类型

当接口作为方法的参数时 , 需要传递什么呢?当接口作为方法的返回值类型时,需要返回什么呢?
对,其实都是它的
子类对象。 ArrayList 类我们并不陌生,查看 API 我们发现,实际上,它是 java.util.List 接口的实现
类。所
以,当我们看见 List 接口作为参数或者返回值类型时,当然可以将 ArrayList 的对象进行传递或返
回。
请观察如下方法: 获取某集合中所有的偶数
定义方法:

 调用方法:

接口作为参数时,传递它的子类对象。
接口作为返回值类型时,返回它的子类对象。

文章来源: blog.csdn.net,作者:陶然同学,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_45481821/article/details/126207143

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。