内部类的访问规则

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

之所以可以直接访问外部类的成员,是因为内部类中持有外部类的引用,格式:外部类名.this

2.外部类要访问内部类,必须建立内部类对象。

访问格式:

1.当内部类定义在外部类的成员位置上并且非私有时,可以在外部其他类中,直接建立内部类的对象。

格式:

外部类名.内部类名 变量名=外部类对象.内部类对象;

如:Outer.Inner in=new Outer().new Inner();

2.当内部类在成员位置上,就可以被成员修饰符所修饰。

比如private:将内部类在外部类中进行封装。

static:内部类就具备了static的特性。

当内部类被static修饰后,只能访问外部类的静态成员,出现了访问局限。

在外部其他类中,如何直接访问static内部类的静态成员呢?

Outer.Inner.function();(Inner 是静态的,可以直接通过外部类名Outer来访问;function也是静态的,可以直接通过其所在类的类名Inner访问。)

注意:如果在内部类中定义了静态成员,则该内部类必须也是静态的。

当外部类中的静态方法中需要访问内部类时,内部类必须也是static的。

总的来说就是那个比较常见的提示:“不能在静态上下文中引用非静态变量”。

3.因为内部类可以定义在外部类中任意的位置。

当内部类被定义在局部时(比如,在方法中):

1.不可以被成员修饰符修饰。

2.可以直接访问外部类中的成员,因为还持有外部类的引用。

但不可以访问它所在的局部区域中的变量,除非该变量被final修饰。

什么时候需要使用内部类?

当描述事物时,事物的内部还有事物,在内部的事物就用内部类来描述,因为内部事物需要使用外部事物的内容。

内部类--毕向东Java基础教程学习笔记的更多相关文章

  1. 匿名内部类--毕向东java基础教程学习笔记

    1.匿名内部类其实就是内部类的简写形式. 2.定义匿名内部类的前提: 该内部类必须继承一个类,或者实现一个接口. 3.匿名内部类的格式:new 父类名或接口名(){定义子类内容:} 4.其实匿名内部类 ...

  2. 异常处理——毕向东Java基础教程学习笔记

    1.异常:就是程序运行过程中出现的不正常情况. 异常的由来:问题本身也是日常生活中一个具体的事物,也可以通过java类的形式进行描述,并封装成对象.                        其实 ...

  3. 多线程--毕向东java基础教程视频学习笔记

    目录 1.多线程运行的安全问题 2.多线程同步代码块 3.同步方法的锁是this 4.静态同步方法的锁是Class对象 5.单例设计模式(面试中的考点) 6.死锁(一个发生死锁的例子) 多线程运行的安 ...

  4. 黑马毕向东Java基础知识总结

    Java基础知识总结(超级经典) 转自:百度文库 黑马毕向东JAVA基础总结笔记    侵删! 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部 ...

  5. 【JAVA】毕向东Java基础视频教程-笔记

    传智播客-毕向东Java基础视频教程 <2013年-33days>版-学习代码记录 链接: GitHub库:JavaBXD33 目录 01-Java基础知识 02-Java对象细节 03- ...

  6. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  7. 毕向东java基础总结

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  8. Python基础教程学习笔记:第一章 基础知识

    Python基础教程 第二版 学习笔记 1.python的每一个语句的后面可以添加分号也可以不添加分号:在一行有多条语句的时候,必须使用分号加以区分 2.查看Python版本号,在Dos窗口中输入“p ...

  9. java基础知识学习笔记

    本文知识点以js为参照.对比分析得出笔记.JavaScript之所以叫JavaScript是打算借助java推广自己.虽然都是开发语言,但JavaScript一开始主要运行在 客户端,而java主要运 ...

随机推荐

  1. Hibernate中延迟加载和缓存

    什么是延迟加载? 延迟加载是指当应用程序想要从数据库获取对象时(在没有设置lazy属性值为false),Hibernate只是从数据库获取符合条件的对象的OId从而生成代理对象,并没有加载出对象 访问 ...

  2. Gradle学习系列之一——Gradle快速入门

    这是一个关于Gradle的学习系列,其中包含以下文章: Gradle快速入门 创建Task的多种方法 读懂Gradle语法 增量式构建 自定义Property 使用java Plugin 依赖管理 构 ...

  3. Win10安装.net framework 4.0失败提示已是操作系统一部分如何解决

    有位用户因为工作需求,所以想在win10系统电脑中安装microsoft .net framework 4.0.可是在安装过程中却失败了,还遇到提示"Microsoft.net framew ...

  4. Linq查询操作之Where筛选

    筛选操作where能够处理逻辑运算符组成的逻辑表达式.比如逻辑“与”,逻辑“或”,并从数据源中筛选数据,它和where子句的功能非常相似.Enumerable类的Where()原型如下: public ...

  5. 【C#】1.2 控制台应用程序学习要点

    分类:C#.VS2015 创建日期:2016-06-14 教材:十二五国家级规划教材<C#程序设计及应用教程>(第3版) 一.要点概述 <C#程序设计及应用教程>(第3版)的第 ...

  6. C#如何使用异步编程

    怎么使用异步,就是用委托进行处理,如果委托对象在调用列表中只有一个方法,它就可以异步执行这个方法.委托类有两个方法,叫做BeginInvoke和EndInvoke,它们是用来异步执行使用. 异步有三种 ...

  7. C#的pictureBox怎样使用多张图片简单切换

    首先,先创建一个新的winform项目ImageTest,选择窗体,起名我ImageForm,在ImageForm拉一个picturebox控件,一个控制器trimer,一个相册imageList,在 ...

  8. Activity按下2次退出和获取当前时间

    先看下onBackPressed和onKeyDown的区别 在Android上有两种方法来获取该按钮的事件 1.直接获取按钮按下事件,此方法兼容Android 1.0到Android 2.1 也是常规 ...

  9. 解决Cannot change version of project facet Dynamic Web M

    dynamic web module 版本之间的区别: Servlet 3.0 December 2009 JavaEE 6, JavaSE 6 Pluggability, Ease of devel ...

  10. c语言笔试题(带答案)

    填空: 1,short int a[10]={123, 456, 789}; sizeof(a)= 对于64位机来说,指针为8字节表示.其中 sizeof是一运算符,返回编译器为其分配的数组空间大小, ...