内部类与外部类之间的访问

目           录

1.内部类与外部类

2.内部类的特点:内部类可以直接访问外部类的成员(成员变量和成员方法),包括私有成员。

3.内部类与外部类之间的访问

在测试类中调用成员内部类中的方法:

 外部类访问成员内部类中的成员:

静态的成员内部类,只能访问外部类的静态成员

私有的成员内部类,外界就无法直接创建其对象,可以通过外部类的方法访问

 局部内部类,在外界没有直接创建其对象的语法

局部内部类访问外部类的局部变量:


1.内部类与外部类

将一个类A 定义到另一个类B的内部,那么类A叫做内部类,类B叫做外部类。

根据内部类在外部类中定义的位置不同,分为 成员内部类,和局部内部类

  • 成员内部类: 定义在外部类的成员位置。
  • 局部内部类: 定义在外部类的局部位置,也就是外部类中的方法内部。
class B {           //B是外部类
   
    class A {       //A是成员内部类

    }

    public void show() {
        
        class C {    //C是局部内部类

        }
    }

}

2.内部类的特点:内部类可以直接访问外部类的成员(成员变量和成员方法),包括私有成员。


package org.xingyun.interface1;

public class Wai {           //外部类
    int num = 20;
    private int a = 60;

    //成员内部类
    public class Nei {
        public void neiShow() {
            System.out.println("内部类的show方法");
            //内部类的特点:内部类可以直接访问外部类的成员,包括私有成员。
            System.out.println(num);              //外部类的成员变量
            System.out.println(a);                //外部类的私有变量
            waiShow();                            //外部类的成员方法
            hehe();                               //外部类的私有方法
        }
    }

    public void waiShow() {
        System.out.println("外部类的show方法");
    }

    private void hehe() {
        System.out.println("外部类的私有方法");
    }
    
}

如果外部类与内部类的成员有重名的话 ,可以这样拿到外部类的成员:外部类名.this.变量名(其中 Outer.this 表示外部类对象)

class Outer {
    //外部类的成员变量
    public int num = 10;

    class Inner {
        //内部的成员变量
        public int num = 20;

        public void show() {
            //局部变量
            int num = 30;
            System.out.println(num);      //30(就近原则)
            System.out.println(this.num); //20(内部类的变量)

            System.out.println(Inner.this.num); //20(内部类的变量,也可以这样取到)
           
            System.out.println(new Outer().num); //10(创建了一个外部类的对象去取变量)这样太繁琐了
            // 可以这样Outer.this.num .   (Outer.this 表示外部类对象)
            System.out.println(Outer.this.num);  //10
 
        }
    }
}

3.内部类与外部类之间的访问

在测试类中调用成员内部类中的方法:

需要先创建成员内部类的对象的语法格式:外部类名.内部类名 对象名 = new 外部类名().new 内部类名();

 class Wai {       //外部类
     private int a=100;
    //成员内部类
    public class Nei {

        public void neiShow() {
            System.out.println("内部类的show方法" );
        }
    }

    public void waiShow() {
        System.out.println("外部类的show方法");
    }
}


public class Test {
    public static void main(String[] args) {
        //在测试类里面,调用内部类的方法
        //创建成员内部类的对象    外部类名.内部类名 对象名 = 外部类对象.内部类对象
        Wai.Nei nei = new Wai().new Nei();
        nei.neiShow();
        System.out.println("====================================");
        //内部类可以直接访问外部类的成员,包括私有成员。
        Wai wai = new Wai();
        wai.waiShow();
    }
}
//执行结果:
/*
内部类的show方法
====================================
外部类的show方法
 */

 外部类访问成员内部类中的成员:

需要先创建成员内部类的对象:     内部类名 对象名 =new 内部类名();

public class Wai {        //外部类

    //成员内部类
    public class Nei {
        //内部类的成员变量
        int n = 5;
        int x = 100;

        //内部类的成员方法
        public void neiShow() {
            System.out.println("内部类的show方法");
        }
    }

    public void waiShow() {
        System.out.println("外部类的show方法");
    }
    //外部类访问内部类的成员
    public void test() {
        //创建内部类对象
        Nei nei = new Nei();
        //访问内部类的成员变量
        System.out.println(nei.n);
        System.out.println(nei.x);
        //访问内部类的成员方法
        nei.neiShow();
        
        //直接访问外部类成员
        waiShow();
    }
}

静态的成员内部类,只能访问外部类的静态成员

静态的成员内部类,创建对象的语法: 外部类名.内部类名 对象名 = new 外部类名.内部类名();

public class Test {
    public static void main(String[] args) {
        //静态的成员内部类,创建对象的语法
        Wai.Nei nei = new Wai.Nei();
        nei.neiShow();
        //静态的成员内部类,只能访问外部类的静态成员。
    }
}


 class Wai{
    static int num = 100;

    //static 也可以修饰内部类
    public static class Nei {
        public void neiShow() {
            //静态的成员内部类,只能访问外部类的静态成员。
            System.out.println(num);
        }
    }
}

私有的成员内部类,外界就无法直接创建其对象,可以通过外部类的方法访问

public class privateNei {
    public static void main(String[] args) {
        //私有的成员内部类,外界就无法创建其对象了
        //通过外部类的方法访问
        Outer outer = new Outer();
        outer.waiShow();
    }
}

class Outer {     //外部类
    //内部类可以私有修饰
    private class Inner {        //成员内部类
        public void neiShow() {
            System.out.println("nei show");
        }
    }

    public void waiShow() {
        //可以外部类访问内部类,创建内部类对象
        Inner inner = new Inner();
        inner.neiShow();
    }
}

 局部内部类,在外界没有直接创建其对象的语法

public class Test {
    public static void main(String[] args) {
        //局部内部类,在外界没有直接创建其对象的语法。通过外部类方法访问
        Wai wai = new Wai();
        wai.waiShow();
    }
}

class Wai {
    int num = 20;
    private double a = 3.5;

    public void waiShow() {
        //局部内部类
        class Nei {
            int t = 50;

            public void neiShow() {
                System.out.println(num);
                System.out.println(a);
            }
        }
        //创建局部内部类对象
        Nei nei = new Nei();
        nei.neiShow();
    }
}

局部内部类访问外部类的局部变量:

局部内部类访问外部类的局部变量,局部变量必须用final修饰,使之成为常量.

为什么呢? 因为局部变量会随着方法的调用完毕而消失,这个时候,局部对象并没有立马从堆内存中消失,还要使用那个变量。为了让数据还能继续被使用,就用final修饰,这样,在堆内存里面存储的其实是一个常量值。(JDK1.8之后,final会默认加上)

class Outer {
    public void waiShow(final int a) {
        //局部变量
        final int num = 20; 

        //定义局部内部类
        class Inner {
            public void neiShow() {
                //局部内部类,要访问外部类的局部变量,局部变量,必须用final修饰,使之成为常量
                System.out.println(num);    //20
                System.out.println(a);      //20
            }
        }
    }
}

(小编也在努力学习更多哟!以后会多多分享哒!)  

希望对友友们有所帮助!!!

  • 42
    点赞
  • 150
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第1页。信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第1页。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第1页。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第1页。 信息技术系软件开发类毕业设计报告撰写格式 一、 引言 1.1 目的 说明编写本《系统设计说明书》的目的。 1.2 背景: 说明理解本报告所需的背景,如与公司其它软件之间的联系等。 项目概述; 所设计的产品的概述 1.3 术语 列出本系统设计说明书中专门术语的定义和英文缩写词的原词组。 1.4 参考资料: 列出编写参考的文件、 资料、 技术标准以及他们的作者、 标题、 编号、发布日期和出版单位。 编号 资料名称 简介 作者 日期 出版单位 列出编写本报告时需查阅的 Intenet 上杂志、专业著作、技术标准以及他们的网址。 网址 简介 二、系统分析设计 2.1 指导思想与设计原则 2.2 系统描述 2.2.1 对需求的支持 设计满足需求的程度; 设计未能完全满足的需求及其原因。 2.2.2 系统目标 简述所开发的系统, 如果本系统同其他系统有不论是手工还是计算机方面的关系, 也要描述。 可参考需求分析报告的内容。 2.3 总体设计 2.3.1 系统运行环境 给出本软件系统运行所需的基本软 /硬件环境、使用本软件系统典型用户的设备分布图及设备上相应软件配置。软件环境包括:操作系统、数据库、以及其它支撑软件;硬件环境包括:主机 类型、网络类型、存储器容量、其它特殊设备。 2.3.2 软件功能描述 描述被开发系统的功能。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第2页。信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第2页。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第2页。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第2页。 2.3.3 软件结构 以图表形式给出软件子系统结构和模块组成结构。 2.3.5 技术路线 给出本软件系统在实现过程中所采用的技术路线、方法。对比较新的技术给予详细的阐述及必要的说明,在可能的情况下给出相应的技术参考资料。 2.4 外部接口 2.4.1 用户接口 描述该软件与用户的接口,包括用户输入输出界面样式、操作方式和界面间的转移关系。界面可截图,并说明设计理由及优缺点。 2.4.2 软件接口 描述该软件与其它系统的软件接口, 主要说明其它系统提供的编程接口和本系统向其它系统提供的编程接口。 2.4.3 其它接口 描述该软件与其它系统的其它类型接口, 主要说明其它系统提供的和本系统向其它系统提供的硬件接口、通信协议及规程、数据交换格式等。 2.5 模块设计 2.5.1 功能 简述各模块的功能。 2.5.2 性能 说明对各模块的性能要求,包括精度、时间特性和处理速度。 2.5.3 内部接口 说明各模块之间接口,包括: 各模块的用途、使用 (调用 )方式; 2) 说明其每个子程序(方法, Method )、特性( Property)和反馈的事件( Event ),相应的输入、输出项说明; 指明各模块内含的各类外部接口,并列出这些外部接口说明材料名。 2.5.4 算法 定义系统所采用的计算或算法; 确定实现这些算法的流程。 可剪切部分代码。 2.6 数据库设计 2.6.1 数据流图 2.6.2 数据模型 2.6.3 数据字典 对数据库设计中涉及到的各种项目,如数据项、记录、表、数据库等建立数据字典,以说 它们的标识符、同义名及有关信息,并说明对此数据字典设计的基本考虑。可采用数据库设计工 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第3页。信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第3页。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第3页。 信息技术系软件开发类毕业设计报告撰写格式全文共8页,当前为第3页。 具(如 ER 图设计工具)生成的数据字典。请详细说明主键、约束、触发、索引等。 对逻辑数据库 /文件设计的描述; 对物理数据库 /文件设计的描述; 数据校验规则。 2.7 故障处理说明 说明本系统所采用的基本错误处理方法和原则, 例如:统一采用 VB.NET try-catch 错误方法,所有错误最终必须以界面形式向用户说明。用一览表方式说明各类可能的错误或故障出现时系统 的处理方法和补救措施。 2.8 安全和备份 系统在安全和备份方面的考虑与设计,包括回滚和恢复。在数据库的设计中,如何通过区分不同的访问者、不同的访问类型和不同的数据对象,进行分别对待而获得的数据库安全保密设计考虑。 三、软件测试 1 测试方案设计 测试目的、测试方法、测试

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

naoguaziteng

谢谢友友的打赏!一起努力吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值