前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Java中嵌套类用法

Java中嵌套类用法

作者头像
程序你好
发布于 2018-09-29 03:20:57
发布于 2018-09-29 03:20:57
2.2K00
代码可运行
举报
文章被收录于专栏:程序你好程序你好
运行总次数:0
代码可运行

Java中,可以在另一个类中定义一个类。这些类称为嵌套类。它们使您能够对只在一个地方使用的类进行逻辑分组。因此,这增加了封装的使用,并创建了更具可读性和可维护性的代码。

嵌套类的作用域由其封闭类的作用域限定。因此,在上面的例子中,类NestedClass并不独立于类的 OuterClass外部类而存在。

嵌套类可以访问嵌套类的成员,包括私有成员。然而,反之则不然,即封闭类不能访问嵌套类的成员。

嵌套类也是其封闭类的成员。

作为其封闭类的成员,嵌套类可以声明为 private, public, protected, or package private (default)(私有、公共、受保护或包私有(默认))。

嵌套类分为两类:

1、静态嵌套类(static nested class):声明为静态的嵌套类称为静态嵌套类。

2、内部类(inner class):内部类是非静态嵌套类。

Syntax

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class OuterClass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
...
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class NestedClass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        ...
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

Static Nested Classes(静态嵌套类)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OuterClass.StaticNestedClass nestedObject =
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     new OuterClass.StaticNestedClass();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Java program to demonstrate accessing
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// a static nested class
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class OuterClass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // static member
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    static int outer_x = 10;
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // instance(non-static) member
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    int outer_y = 20;
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // private member
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private static int outer_private = 30;
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // static nested class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    static class StaticNestedClass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        void display()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // can access static member of outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            System.out.println("outer_x = " + outer_x);
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // can access display private static member of outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            System.out.println("outer_private = " + outer_private);
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // The following statement will give compilation error
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // as static nested class cannot directly access non-static membera
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // System.out.println("outer_y = " + outer_y);
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Driver class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class StaticNestedClassDemo
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // accessing a static nested class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        nestedObject.display();
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

Output:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outer_x = 10
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outer_private = 30

Inner Classes(内部类)

要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
OuterClass.InnerClass innerObject = outerObject.new InnerClass();

There are two special kinds of inner classes :

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Java program to demonstrate accessing
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// a inner class
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class OuterClass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // static member
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    static int outer_x = 10;
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // instance(non-static) member
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    int outer_y = 20;
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // private member
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    private int outer_private = 30;
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // inner class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    class InnerClass
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        void display()
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // can access static member of outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            System.out.println("outer_x = " + outer_x);
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // can also access non-static member of outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            System.out.println("outer_y = " + outer_y);
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            // can also access private member of outer class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            System.out.println("outer_private = " + outer_private);
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Driver class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class InnerClassDemo
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public static void main(String[] args)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    {
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        // accessing an inner class
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        OuterClass outerObject = new OuterClass();
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        OuterClass.InnerClass innerObject = outerObject.new InnerClass();
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        innerObject.display();
代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    }
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
}

Output:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outer_x = 10
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outer_y = 20
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
outer_private = 30

静态类和内部类(非静态嵌套类)的区别:

静态嵌套类不能直接访问封闭类的其他成员(非静态变量和方法),因为由于它是静态的,它必须通过对象访问封闭类的非静态成员。也就是说,它不能直接引用其封闭类的非静态成员。由于这个限制,静态嵌套类很少被使用。

非静态嵌套类(内部类)可以访问其外部类的所有成员(静态和非静态变量和方法,包括private),并且可以像外部类的其他非静态成员那样直接引用它们。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
OpenShift 4 离线安装复盘(精华版)
详细安装步骤见 OpenShift 4企业高可用集群(离线)安装实践 & Troubleshooting记录,本文重新梳理并剔除了部分不适合手机阅读的细节,总结自己对整个过程的认识,并强调一些网上资源未提及或者不够明显的地方,供大家参考。
DevOps云学堂
2019/11/15
4.6K0
容器超融合的实现&持久存储的动态分配 : Openshift3.9学习系列第六终结篇
干货巨献:Openshift3.9的网络管理大全.加长篇---Openshift3.9学习系列第二篇
魏新宇
2018/07/30
1.5K0
容器超融合的实现&持久存储的动态分配  : Openshift3.9学习系列第六终结篇
OpenShift修改subdomain域名记录
在客户的已经准备好上线的OpenShift 3.9集群中提出修改域名需求,因此先在本人的自己测试环境进行了验证,过程如下,并且还有一些坑,并进行了记录;将ocp6修改为ocp7。
DevOps云学堂
2019/10/18
3.8K0
OpenShift修改subdomain域名记录
Centos7中单节点openshift_3.11安装及配置开机自启
Centos7中单节点openshift_3.11安装及配置开机自启
Java架构师必看
2021/06/09
9530
Centos7中单节点openshift_3.11安装及配置开机自启
009.OpenShift管理及监控
用于调度,并控制pod不能在计算资源少于指定数量的情况下运行。调度程序试图找到一个具有足够计算资源的节点来满足pod请求。
木二
2020/06/24
2.7K0
004.OpenShift命令及故障排查
OCP将OpenShift集群中的为由主节点管理的对象统称为资源,如:node、service、pod、project、deployment、user。
木二
2020/06/23
2.6K0
openshift/origin工作记录(11)——Openshift3.6向Openshift3.11升级以及CVE
版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址:http://blog.csdn.net/huqigang,内容如有错误,欢迎留言指出,谢谢! https://blog.csdn.net/huqigang/article/details/84840197
胡了了
2019/05/27
1.2K0
厉害了!全CI/CD工具链的实现 | 基于OCP离线: Openshift3.9学习系列第五篇
干货巨献:Openshift3.9的网络管理大全.加长篇---Openshift3.9学习系列第二篇
魏新宇
2018/07/30
2K0
厉害了!全CI/CD工具链的实现 | 基于OCP离线: Openshift3.9学习系列第五篇
Openshift 3.11的14大新功能详解
聂健是大魏的红帽同事,本文已获得授权转载,欢迎读者阅读他的技术blog:https://www.cnblogs.com/ericnie/
魏新宇
2018/12/13
4.3K0
OpenShift 3.11 离线安装
环境描述 介绍 两个节点,一个master节点,另一个当做compute和infra节点,使用的操作系统为rhel 7.4,没有安装EFK、service broker、service catalog、metric,promethues在3.11正式GA,默认就会安装。因为本人有红帽的订阅账号,所以可以从红帽的源进行yum安装,需要提醒的是,从3.11开始,红帽官方的镜像仓库从registry.access.redhat.com变为registry.redhat.io,且拉取镜像也需要红帽的订阅账号了。 主
DevOps云学堂
2019/10/18
1.8K0
如何有效地对Docker的镜像进行管理?
容器的存储空间如何提供? 前段时间,笔者看到一篇文章,题目是“容器就是Linux”,写的不错。容器说简单点就是容器级别的虚拟化,在一个Kernel Space上虚拟出多个User Space。那么,容器如何使用存储空间呢? 我们知道,Windows和Linux的操作系统,都是使用文件系统的。在RHEL上,可以针对磁盘划分区,然后创建文件系统。当然,也可以使用LVM的方式,将磁盘创建vg,划分lv,然后创建文件系统。 那么,Docker通过什么方式获取存储空间呢,或者说使用什么存储驱动? 在RHEL, Ce
魏新宇
2018/03/22
1.8K0
如何有效地对Docker的镜像进行管理?
OpenShift企业版安装:单Master集群
OpenShift企业版安装:单Master集群 项目描述本文目的本文描述搭建红帽OpenShift容器平台单Master集群的过程。 适合用于在没有互联网连接的环境中搭建测试验证使用的OpenShift集群。安装版本Red Hat OpenShift Container Platform 3.7作者陈耿 GitHub ID: nichochen 本文是一篇安装指引,目的并非用于讲解教学。故一些技术细节将不展开详细介绍,请读者见谅。 1 安装材料 1.1 安装介质 OpenShift的离线环境安装需要提前准
魏新宇
2018/03/22
5.8K0
OpenShift企业版安装:单Master集群
安装openshift 4.X
本文实现的是基于有主机和网络(无PXE、无dhcp、无dns)的情况下,安装OCP4.6.3。
思量
2021/01/20
2.8K1
Openshift 4.4 静态 IP 离线安装系列(一):准备离线资源
本系列文章描述了离线环境下以 UPI (User Provisioned Infrastructure) 模式安装 Openshift Container Platform (OCP) 4.4.5 的步骤,我的环境是 VMware ESXI 虚拟化,也适用于其他方式提供的虚拟机或物理主机。离线资源包括安装镜像、所有样例 Image Stream 和 OperatorHub 中的所有 RedHat Operators。
米开朗基杨
2020/06/04
2.7K1
Openshift高阶探索实验
一、HA方式部署Openshift 一个典型的OCP高可用架构是:master至少应为三个,且为奇数个(上面有etcd); 基础架构节点不少于两个,上面运行日志、监控、router、INTEGRATE
魏新宇
2018/03/22
3K1
Openshift高阶探索实验
Openshift3.7完整安装手册+容器化Harbor
大魏:燕华是我们的合作伙伴,对Openshift很熟悉。按照本文档,可以一步步将Openshift3.7安装起来。本文仅供测试环境参考,生产环境慎用。 1 环境准备 安装rhel7.3系统,全部使用最小化安装。 主机名IP功能说明ocp37master01.demo.com192.168.250.111Master节点,yum源,ntp时钟服务器、harbor镜像仓库(https加密连接)ocp37node01.demo.com192.168.250.121基础架构节点、计算节点 1.1 基础环境准备 1.
魏新宇
2018/04/18
1.8K0
Openshift3.7完整安装手册+容器化Harbor
openshift/origin学习记录(0)——Ansible安装多节点openshift集群
本节内容是基于Ansible Playbook自动部署openshift集群,之后几节内容会通过一个AllInOne的集群手动添加组件,研究实现的流程。 本部分内容是3.6.0,可能不适用3.6
胡了了
2017/12/28
2.4K0
openshift/origin学习记录(0)——Ansible安装多节点openshift集群
007.OpenShift管理应用部署
RC确保pod指定数量的副本一直运行。如果pod被杀死或被管理员显式删除,复制控制器将自动部署相应的pod。类似地,如果运行的pod数量超过所需的数量,它会根据需要删除pod,以匹配指定的副本计数。
木二
2020/06/23
1.9K0
Docker 使用指南 (二):搭建本地仓库
去中央仓库下载镜像有时候非常的慢,所以 docker 本地仓库和 gitlab 类似,都是为了便于公司内部人员的使用。 一.本地安装 本次实验环境:腾讯云服务器 CentOS 6.7 x86_64 #
田飞雨
2016/07/20
8K1
Docker 使用指南 (二):搭建本地仓库
docker私有仓库搭建,证书认证,鉴权管理
-Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
互扯程序
2019/05/14
3.2K0
docker私有仓库搭建,证书认证,鉴权管理
相关推荐
OpenShift 4 离线安装复盘(精华版)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档