热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java复习第十天:final关键字、权限修饰符、内部类、匿名内部类

一final关键字1.final的使用对象final可以修饰类:那么该类就不能被继承(太监类)final可以修饰方法:那么该方法就不能被重写final可以修饰变量:a.成员变量那么

一 final关键字

1.final的使用对象
final可以修饰类: 那么该类就不能被继承(太监类)
final可以修饰方法: 那么该方法就不能被重写
final可以修饰变量:
a.成员变量
那么该成员变量只能赋值一次,创建对象之后不能再次赋值
可以直接在定义成员变量时赋值,也可以在构造方法中给成员变量赋值
b.局部变量
那么该局部变量只能赋值一次,
可以先定义后赋值,也可以定义的同时赋值,但是只能赋值一次
c.引用类型变量
那么该引用类型变量所保存的地址值不能改变,而不是地址中的内容不能改变

二 权限修饰符

《Java复习第十天:final关键字、权限修饰符、内部类、匿名内部类》
一般我们这样使用权限修饰符:
成员变量使用 private ,隐藏细节。
构造方法使用 public ,方便创建对象。
成员方法使用 public ,方便调用方法。
tip:不加权限修饰符,其访问能力与default修饰符相同

修饰成员变量
public 无论在哪个类中,创建了本类对象之后都可以直接使用
protected 在本类,本包其他类,以及其他包的子类中可以直接使用
default 只能在本类,本包的其他类中可以直接使用
private 只能在本类中使用
修饰成员方法
public 无论在哪个类中,都可以直接调用成员变量
protected 在本类,本包其他类,以及其他包的子类中可以直接调用
default 只能在本类,本包其他类中直接调用
private 只能在本类中调用
修饰构造方法
public : 无论在那个类中都可以创建对象
protected和default是一样,因为构造方法子类是无法继承
只能在本类和本包其他类中使用
private: 只能本类中创建对象(一般用于单例设计模式)

tip:局部变量不能使用权限修饰符(无意义)

三.内部类

1.1成员内部类

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

1.2访问特点

1.内部类可以直接访问外部类的成员,包括私有成员。
2.外部类要访问内部类的成员,必须要建立内部类的对象。
创建内部类对象格式:
外部类名.内部类名 对象名 = new 外部类型().new 内部类型();

外部类型 外部类对象名 = new 外部类();
外部类型.内部类型 内部对象名 =外部类对象. new 内部类();

public class Person {
private boolean live = true;
class Heart {
public void jump() {
// 直接访问外部类成员
if (live) {
System.out.println("心脏在跳动");
} else {
System.out.println("心脏不跳了");
}
}
}
public boolean isLive() {
return live;
}
public void setLive(boolean live) {
this.live = live;
}
}

public class TestPerson {
public static void main(String[] args) {
/* 创建内部类对象 方式一: Person.Heart heart = new Person().new Heart(); heart.jump();*/
//方式二:
Person p = new Person();
Person.Heart heart1 = p.new Heart();
//调用内部类方法
heart1.jump(); //输出:心脏在跳动
//调用外部类方法
p.setLive(false);
heart1.jump(); //输出: 心脏不跳了

}
}

2.1局部内部类

局部内部类:
public class 外部类{
//成员变量
//成员方法
public void show(){
class 内部类{
}
}
}

2.2访问特点
特点1: 局部内部类只能在局部使用
特点2: 局部内部类中可以无条件访问外部类的成员

3.匿名内部类
3.1前提

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

3.2格式

new 父类名或者接口名(){
// 方法重写
@Override
public void method() {
// 执行语句
}
};

3.2.3.使用方式
定义接口

public abstract class FlyAble{
public abstract void fly();
}

创建内部类,并调用

public class InnerDemo1 {
public static void main(String[] args) {
/* 1.等号右边:定义并创建该接口的子类对象 2.等号左边:是多态,接口类型引用指向子类对象 */
FlyAble f = new FlyAble(){
public void fly() {
System.out.println("我飞了~~~");
}
};
// 将f传递给showFly方法中
showFly(f);
}
public static void showFly(FlyAble f) {
f.fly();
}
}

以上可以简化如下:

public class InnerDemo2 {
public static void main(String[] args) {
/* 创建匿名内部类,直接传递给showFly(FlyAble f) */
showFly( new FlyAble(){
public void fly() {
System.out.println("我飞了~~~");
}
});
}
public static void showFly(FlyAble f) {
f.fly();
}
}

推荐阅读
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
author-avatar
w手机用户2736240235dOD
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有