一、成员内部类
作为外部类的成员存在的类,则称之为成员内部类
 public class OuterClass{
public class InnerClass{ }
}

成员内部类样例

成员内部类具有如下特征:

1.可以访问外部类所有的成员,包括被声明为私有(private)的;

2.可以使用任何访问权限修饰符,包括protected和private;

3.不允许在外部类以外的其他类中创建内部类对象,如果一定需要被其它类访问,应把内部类的对象声明声明为外部类的属性,

然后在其他类中创建内部类对象,在通过该属性进行访问。

二、局部内部类

存在于外部类的方法中的类,称之为局部内部类,其定位与局部变量相似

 public class OuterClass{
public void method(){
class InnerClass{ }
}
}

局部内部类样例

局部内部类有如下特征:

1.不允许使用任何访问权限修饰符;

2.创建局部内部类的对象的语法,必须在声明局部内部类之后;

3.可以访问外部类所有的成员,包括被声明为私有(private)的;

4.不能访问任何局部变量或方法的参数,除非这些局部变量或参数使用final修饰。

三、静态内部类

使用static修饰的成员内部类,称之为静态内部类

 public class OuterClass{
public static Class InnerClass{ }
}

静态内部类样例

静态内部类有如下特征:

1.不可以访问外部类中非static成员;

2.可以使用任何访问权限修饰符,包括protected和private;

3.可以在其它类中直接创建静态内部类的对象,语法格式为:

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

其他类中创建静态内部类对象

四、匿名内部类

匿名内部类表现为:没有类的声明语法、直接创建已知类的子类对象或已知接口的实现类对象

 public class OuterClass{
public int id = new Object(){
public int calculate(){
return hashCode() * 100;
}
}.calculate(); public void run(){
new Object(){
public void helloworld(){
System.out.println("helloworld ! ! !");
}
}.helloworld();
}
}

匿名内部类样例

内部类的应用

内部类一般应用于以下开发需求:

1.将相关类组织在一起,避免命名的混淆;

2.由于成员内部类可以使用所有访问权限修饰符,则可以实现更深层次的隐藏;

3.实现多继承;

4.更充分地利用外部类的成员,完成特有的业务逻辑,且该部分业务逻辑的实现不符合其它任意一个类的需求。

java内部类概念的更多相关文章

  1. java内部类的作用分析

    提起Java内部类(Inner Class)可能很多人不太熟悉,实际上类似的概念在C++里也有,那就是嵌套类(Nested Class),关于这两者的区别与联系,在下文中会有对比.内部类从表面上看,就 ...

  2. Java内部类的使用小结

    转载:http://android.blog.51cto.com/268543/384844/ Java内部类的使用小结 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可 ...

  3. (转载)Java内部类的使用小结

    原文摘自:http://android.blog.51cto.com/268543/384844/   内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可以是静态stati ...

  4. js闭包vs Java内部类

    前言: 昨天写了一个关于Java内部的博客,在内部类的最后一点中谈到了Java闭包的概念,他是这样定义闭包的:闭包是一个可调用的对象,它记录了一些信息,这些信息来自创建它的作用域.结合Java的内部类 ...

  5. java内部类深入详解 内部类的分类 特点 定义方式 使用

    本文关键词: java内部类 内部类的分类 特点  定义方式 使用   外部类调用内部类 多层嵌套内部类  内部类访问外部类属性  接口中的内部类  内部类的继承  内部类的覆盖  局部内部类 成员内 ...

  6. Java内部类详解(一)

    (转自:http://blog.csdn.net/wangpeng047/article/details/12344593) 很多人对于Java内部类(Inner Class)都十分陌生,甚至听都没听 ...

  7. Java 内部类、静态内部类、匿名内部类

    java提高篇(八)----详解内部类 概念 可以将一个类的定义放在另一个类的定义内部,这就是内部类. 为什么要使用内部类?在<Think in java>中有这样一句话:使用内部类最吸引 ...

  8. 从字节码的角度看Java内部类与外部类的互相访问

    Java中non-static内部类为何可以访问外部类的变量?Java中外部类又为何可以访问内部类的private变量?这两个问题困扰过我一段时间,查了一些网上的答案,大多从“闭包”概念入手,理解起来 ...

  9. JAVA 内部类 (一)

    可将一个类定义置入另一个类定义中.这就叫作“内部类”.内部类对我们非常有用,因为利用它可对那些逻辑上相互联系的类进行分组,并可控制一个类在另一个类里的“可见性”.然而,我们必须认识到内部类与以前讲述的 ...

随机推荐

  1. The ADB binary found at ... 虚拟机运行错误

    虚拟机问题,可以说差点扼杀我开发 APP 的乐趣,哼,最后请教了一下辉哥(学长),终于解决 —— 用真机调试.下面是步骤: 首先,检查一下真机连接需要的 SDK 是否安装,未安装,勾选进行安装 接着用 ...

  2. PHP0002:PHP基础1

    PHP基础 一个表单同时提交get 和 post php保存数据到文件

  3. MySQL int、char、varchar 最大值是多少?

    1.int(len) (1)max(len) = 255 (2)存储范围: 带符号整数:-2147483648-2147483647. 无符号(unsigned)整数:0-4294967295. 2. ...

  4. JS DOM操作(创建、遍历、获取、操作、删除节点)

    创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="u ...

  5. SpringBoot初学(4)– JdbcTemplate和Mybatis

    前言 github: https://github.com/vergilyn/SpringBootDemo 代码位置: 一.Spring Boot集成JdbcTemplate或NamedParamet ...

  6. 纪中集训2020.02.05【NOIP提高组】模拟B 组总结反思——【佛山市选2010】组合数计算,生成字符串 PPMM

    目录 JZOJ2290. [佛山市选2010]组合数计算 比赛时 之后 JZOJ2291. [佛山市选2010]生成字符串 比赛时 之后 JZOJ2292. PPMM 比赛时 之后 JZOJ2290. ...

  7. 剑指offer-面试题30-包含min函数的栈-栈

    /* 题目: 定义栈的数据结构,实现一个能够得到栈的最小元素的min函数. */ /* 思路: 错误思路:每次保存当前最小的元素,如果当前最小元素弹出,最小元素是谁? 正确思路:两个栈,一个栈保存数据 ...

  8. oracle add_month函数

    本文转自:https://blog.csdn.net/lanchengxiaoxiao/article/details/7695057 add_months 函数主要是对日期函数进行操作,举例子进行说 ...

  9. Codeforces Round #592 (Div. 2) D - Paint the Tree

    题目链接:https://codeforces.com/contest/1244/problem/D 题意:给你一个树,让你把树上的每个节点染成三种颜色,使得任意三个互相相邻的节点颜色都不一样(意思是 ...

  10. Codeforces Round #615 (Div. 3) 补题记录

    第一次搞CF,结果惨不忍睹...还是太菜了 A:要用到全部的钱,所以总数必须是3的倍数,而且初始状态下任意一人的钱数不能超过总数除以3,否则没法分了 (也就这个签到算是在我能力范围之内了....) # ...