Java内部类(一)

常用类(一)

内部类

  • 成员内部类:一个类定义在另一个类中
  • 静态内部类:static
  • 局部内部类:一个方法内定义一个类
  • 匿名内部类:没有名字的内部类

内部类如下

class Outer{class Inner{}
}

特点:

  1. 编译后可以生成独立的字节码文件
  2. 内部类可以直接访问外部类的私有成员,而不破坏封装
  3. 内部类可以为外部类提供必要的内部功能组件

成员内部类

  • 在类的内部定义,与实例变量,实例方法同级别的类
  • 外部类的一个实例部分,创建内部类对象时,必须依赖外部类对象
  • 当外部类和内部类存在重名属性时,会优先访问内部类属性,要是像访问外部类的,需要在属性名前面加上Outer.this.属性名
  • 成员内部类不能定义静态成员,但是可以定义静态常量
package common.Demo01;public class Outer {//实例变量private String name="mishen";private int age=20;//内部类class Inner{private String address="北京";private String phone="110";//方法public void show(){//打印外部类的属性System.out.println(name);System.out.println(age);//打印内部类的属性System.out.println(address);System.out.println(phone);}}}
package common.Demo01;public class Test {public static void main(String[] args) {
//        //创建外部类对象
//        Outer outer = new Outer();
//        //创建内部类对象
//        Outer.Inner inner = outer.new Inner();//一步到位Outer.Inner inner=new Outer().new Inner();inner.show();}

静态内部类

  • 不依赖外部类对象,可直接创建或通过类名访问,可声明静态成员
  • 只能直接访问外部类的静态成员
package common.Demo02;
//外部类
public class Outer {private String name="xxx";private int age=19;//静态内部类,和外部类级别相同,目的是为外部类使用static class Inner{private  String address="上海";private String phone="110";//静态成员private static int count=100;public void  show(){//如何调用外部类的属性?//先创建外部类对象//再来调用外部类对象的属性Outer outer = new Outer();System.out.println(outer.age);System.out.println(outer.name);//调用静态内部类的属性和方法System.out.println(address);System.out.println(phone);//调用静态内部类的静态属性System.out.println(Inner.count);}}}
package common.Demo02;public class Test {public static void main(String[] args) {//直接创建静态内部类对象Outer.Inner inner = new Outer.Inner();//调用方法inner.show();}
}

局部内部类

  • 定义在外部类方法中,作用范围和创建对象范围仅限于当前方法中
  • 局部内部类访问外部类当前方法的局部变量时,因无法保证变量的生命周期与自身相同,变量必须修饰为final、
  • 类的使用范围有限,只能在当前的方法中使用
package common.Demo03;//外部类
public class Outer {private String name="mishen";private int age=35;public void show(){//定义局部变量final String address="上海";//局部内部类:注意不能加任何访问修饰符class Inner{//局部内部类的属性private String phone="12344556770";private String email="1234@qq.com";//private final static int count=200;静态常量public void show2(){//访问外部类的属性System.out.println(Outer.this.name);System.out.println(Outer.this.age);//访问内部类的属性System.out.println(this.email);System.out.println(this.phone);//访问局部变量,jdk1.7要求,变量必须为常量,但是jdk1.8之后,会自动添加finalSystem.out.println(address);}}//要想调用show2(),必须要创建局部内部剋对象Inner inner=new Inner();inner.show2();}}

匿名内部类

  • 没有类名的局部内部类(一切特征都与局部内部类相同)
  • 必须继承一个父类或者实现一个接口时使用
  • 是一个定义类,实现类,创建对象的语法合并,只能创建一个该类的对象
  • 优点:减少代码量
  • 缺点:可读性差
package common.Demo04;
//接口
public interface USB {//服务方法void service();}
package common.Demo04;public class Mouse implements USB{@Overridepublic void service() {System.out.println("连接点成功,鼠标开始工作了");}
}
package common.Demo04;import java.sql.SQLOutput;public class Test {public static void main(String[] args) {//创建接口类型的变量
//        USB usb = new Mouse();
//        usb.service();//输出mouse类内的service方法//局部内部类
//        class Fan implements USB{
//            @Override
//            public void service() {
//                System.out.println("连接电脑成功,风扇开始工作了");
//            }
//        }
//
//        //使用局部内部类创建对象
//        USB usb = new Fan();
//        usb.service();//使用匿名内部类来优化=>局部内部类只使用一次//相当于创建了一个局部内部类USB usb = new USB(){@Overridepublic void service() {System.out.println("连接电脑成功,风扇开始工作了");}};usb.service();}
}

以上便是内部类的一些内容

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

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

相关文章

『VUE』14. Style绑定(详细图文注释)

目录 行内css动态样式对象引入数组引入代码演示总结 欢迎关注 『VUE』 专栏,持续更新中 欢迎关注 『VUE』 专栏,持续更新中 大体上和前面的class绑定是一致的,只是class换成了style. 请注意,实际开发中,我们一般建议用class,因为style的权重太高了,用sty…

day13 java final 类和对象的初始化执行顺序

final [面试题]请简述final关键字final修饰类(最终的类)-太监类:该类不能被继承。(比如:String StringBuilder,....) final修饰方法(最终的方法):不能被重写 final修饰的变量 :值不…

边缘计算采集网关如何助力制造企业解决数采问题-天拓四方

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

C++(10): std::map、std::multimap与std::unordered_map

1. 简述 std::map、std::multimap 和 std::unordered_map 是 C 标准模板库(STL)中的三种关联容器,它们提供了存储键值对(pair)的方式,并允许通过键来快速检索值。这三者之间的主要区别在于它们的内部数据结…

JAVA实现网络爬虫

在Java中实现网络爬虫,可以使用Java内置的java.net.URL和java.net.URLConnection类来发送HTTP请求,也可以使用更高级的库,如Apache的HttpClient和Jsoup,后者可以方便地解析HTML文档。 以下是一个使用HttpClient和Jsoup的Java网络…

day14 java接口

接口 接口:对不同类型不同事物相同功能的描述(一定程序上解决了单继承的局限性)接口可以理解成一种标准 规范当类实现这个接口就实现了这个标准或规范接口的格式:权限修饰符 interface 接口名{}权限修饰符只能是public和缺省的。…

ElementUI使用问题记录:设置路由+iconfont图标+自定义表单验证

一、关于导航怎么设置路由 1、在el-menu这个标签的属性中添加 router ,官方文档的解释是:启用vue-router 这种模式 2、在el-menu-item标签中的index属性直接书写路由,就可以实现正常vue-router了 3、在el-menu-item标签中书写路由属性::route…

【C++进阶】哈希的应用之位图和布隆过滤器

位图和布隆过滤器 一,位图1. 实现2. 位图的应用 二,布隆过滤器1. 使用场景2. 模拟实现 三,海量数据面试题哈希切分 四,总结 这一节我们来看哈希的应用 一,位图 先来看一个面试题 这里如果用unordered_set来解决&…

C++学习笔记三--基本控制语句

目录 前言 一、C语句 二、顺序结构 1.声明语句 2.表达式语句 3.基本输入/输出语句 4.复合语句和空语句 三、选择结构 1.if语句 2.switch语句 四、循环结构 1.for语句 2.while语句 3.do...while语句 4.循环的嵌套 五、跳转语句 前言 这篇文章介绍一…

C++11可变模板参数:海纳百川的Args

目录 一、可变模板参数的概念及功能 1.1Args的概念与使用 1.2获取args中的参数 二、emplace可变模板参数的实际应用 三、逗号表达式展开参数包 一、可变模板参数的概念及功能 1.1Args的概念与使用 C11的新特性可变参数模板能够让您创建可以接受可变参数的函数模板和类模板…

二维码门楼牌管理应用平台建设:物业缴费的数字化革新

文章目录 前言一、物业缴费的数字化革新二、在线缴费功能的实现三、智能化缴费管理的优势四、面临的挑战与未来展望五、结语 前言 随着科技的不断进步,二维码门楼牌管理应用平台已成为物业管理的新趋势。在这样一个平台上,物业缴费的数字化革新不仅提高…

【计算机网络】TCP协议可靠传输保证(序列号/确认应答机制、超时重传、最长消息长度、滑动窗口控制、拥塞控制)

TCP协议可靠传输 1.序列号确认应答机制2.超时重传3.最长消息长度4.滑动窗口控制5.拥塞控制 1.序列号确认应答机制 这个机制类似于问答的形式。比如在课堂上老师会问你“明白了吗?”,假如你没有隔一段时间没有回应或者你说不明白,那么老师就会…

橘子学JDK之JMH-03(@State)

这里我们来搞官方的第三个案例,引入新的注解State。 一、案例三代码 package com.levi;/*** Description:* Author: Levi* Date: 2024/4/8 18:44*/import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import org.openjdk.jmh.runner.R…

【YOLOV8】项目目录重点部分介绍和性能评估指标

目录 一 项目目录重点部分介绍 二 性能评估指标 一 项目目录重点部分介绍 1 ultralytics

揭秘Dropbear SSH:轻量级的安全外壳协议实现

在远程管理和通讯的世界里,安全是至关重要的一环。SSH(Secure Shell)协议是互联网上用于安全远程登录和其他网络服务的标准方式。当我们提到SSH时,OpenSSH可能是最广为人知的实现。然而,在资源受限的环境中&#xff0c…

windows环境变量滥用维权/提权

0x01 前提 通过滥用系统的路径搜索机制来欺骗高权限用户执行看似合法的系统二进制文件,实际上是恶意的代码或程序,从而导致升权限并执行恶意操作。 攻击的关键前提: 路径搜索顺序: 当用户在命令行或程序中执行一个命令时&#x…

kafka 高吞吐设计分析

说明 本文基于 kafka 2.7 编写。author blog.jellyfishmix.com / JellyfishMIX - githubLICENSE GPL-2.0 概括 支撑 kafka 高吞吐的设计主要有以下几个方面: 网络 nio 主从 reactor 设计模式 顺序写。 零拷贝。 producer producer 开启压缩后是批量压缩,bro…

【Qt】:常用控件(七:输入类控件)

常用控件 一.Combo Box(下拉框)二.Spin Box(微调框)三.ate Edit&Time Edit(日期微调框)四.Dial(旋钮)五.Slider(滑动条) 一.Combo Box(下拉框…

738.单调递增的数字

// 定义一个名为Solution的类 class Solution { public:// 定义公共成员函数:计算并返回大于等于输入整数N且其各位数字非降序排列的最小整数int monotoneIncreasingDigits(int N) {// 将整数N转换成字符串形式,方便操作每一位数字string strNum to_str…