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

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

1. final关键字


1.1 概述


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

用于修饰 不可改变 内容。

fifinal : 不可改变。可以用于修饰类、方法和变量。

类:被修饰的类,不能被继承。

方法:被修饰的方法,不能被重写。

变量:被修饰的变量,不能被重新赋值。

1.2 使用方式


修饰类

格式如下:

image.png

查询 API 发现像 public final class String 、 public final class Math 、 public final class Scanner等,很多我们学习过的类,都是被 fifinal 修饰的,目的就是供我们使用,而不让我们所以改变其内容。

修饰方法

格式如下:

image.png

重写被 final 修饰的方法,编译时就会报错。

修饰变量

1. 局部变量——基本类型

基本类型的局部变量,被fifinal修饰后,只能赋值一次,不能再更改。代码如下:

image.png

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

写法1

image.png

image.png

根据 final 的定义,写法 1 报错!写法 2 ,为什么通过编译呢?因为每次循环,都是一次新的变量 c 。这也是大家需要注意的地方。

2. 局部变量 —— 引用类型

引用类型的局部变量,被 fifinal 修饰后,只能指向一个对象,地址不能再更改。但是不影响对象内部的成员变量值的修改,代码如下:

image.png

3. 成员变量

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

显示初始化;

image.png

image.png

2. 权限修饰符


2.1 概述


在 Java 中提供了四种访问权限,使用不同的访问权限修饰符修饰时,被修饰的内容会有不同的访问权限,

public :公共的。

protected :受保护的

default :默认的

private :私有的

2.2 不同权限的访问能力


image.png

可见, public 具有最大权限。 private 则是最小权限。

编写代码时,如果没有特殊的考虑,建议这样使用权限:

成员变量使用 private ,隐藏细节。

构造方法使用 public ,方便创建对象。

成员方法使用 public ,方便调用方法。

小贴士:不加权限修饰符,其访问能力与 default 修饰符相同

3. 内部类


3.1 概述


什么是内部类

将一个类 A 定义在另一个类 B 里面,里面的那个类 A 就称为 内部类 , B 则称为 外部类

成员内部类

成员内部类 :定义在 类中方法外 的类。

定义格式:

image.png

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

代码举例:

image.png

访问特点

内部类可以直接访问外部类的成员,包括私有成员。

外部类要访问内部类的成员,必须要建立内部类的对象。

创建内部类对象格式:

 image.png

image.png

image.png

image.png

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

比如, Person$Heart.class

3.2 匿名内部类【重点】


匿名内部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 类对象

开发中,最常用到的内部类就是匿名内部类了。以接口举例,当你使用一个接口时,似乎得做如下几步操作,

1. 定义子类

2. 重写接口中的方法

3. 创建子类对象

4. 调用重写后的方法


我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?匿名内部类就是做这样的快捷方式。

前提

匿名内部类必须继承一个父类或者实现一个父接口

格式

image.png

使用方式

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

定义接口:

image.png

image.png

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

image.png

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

image.png

相关文章
|
20天前
|
存储 缓存 安全
除了变量,final还能修饰哪些Java元素
在Java中,final关键字不仅可以修饰变量,还可以用于修饰类、方法和参数。修饰类时,该类不能被继承;修饰方法时,方法不能被重写;修饰参数时,参数在方法体内不能被修改。
23 2
|
21天前
|
JavaScript 前端开发 Java
java中的this关键字
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript与Vue的大一学生。自学前端2年半,正向全栈进发。若我的文章对你有帮助,欢迎关注,持续更新中!🎉🎉🎉
49 9
|
21天前
|
设计模式 JavaScript 前端开发
java中的static关键字
欢迎来到瑞雨溪的博客,博主是一名热爱JavaScript和Vue的大一学生,致力于全栈开发。如果你从我的文章中受益,欢迎关注我,将持续分享更多优质内容。你的支持是我前进的动力!🎉🎉🎉
47 8
|
1月前
|
Java 开发者
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
在Java多线程编程的世界里,Lock接口正逐渐成为高手们的首选,取代了传统的synchronized关键字
44 4
|
20天前
|
Java
final 在 java 中有什么作用
在 Java 中,`final` 关键字用于限制变量、方法和类的修改或继承。对变量使用 `final` 可使其成为常量;对方法使用 `final` 禁止其被重写;对类使用 `final` 禁止其被继承。
31 0
【零基础学Java】—final关键字与四种用法(二十九)
【零基础学Java】—final关键字与四种用法(二十九)
|
7月前
|
Java
Java中final关键字(看这篇就够了)
Java中final关键字(看这篇就够了)
67 0
|
2月前
|
Java 编译器
在Java中,关于final、static关键字与方法的重写和继承【易错点】
在Java中,关于final、static关键字与方法的重写和继承【易错点】
27 5
|
5月前
|
Java
Java面向对象 ( 多态 | final关键字 | 接口 )
Java面向对象 ( 多态 | final关键字 | 接口 )
|
6月前
|
Java
java之final关键字
java之final关键字