2016-03-27

内部类:就是把一个类的定义放在另外一个外围类定义的里面。

class OutterClass{
class InnerClass {
}
}

1. 内部类主要有四种:成员内部类(member)、静态内部类(static)、局部内部类(local)、匿名内部类(anonymous)

(1)成员内部类:这种内部类的方法可以直接使用外部类实例变量和实例方法,包括private。

不能含有static方法,不能有static变量,static final除外;可以继承有static方法的类。

成员内部类如果有与外部类同名的成员变量和方法,默认情况访问成员内部类成员,如果访问外部类变量和方法,

OuterClass.this.variable
OuterClass.this.method

外部类要访问内部类成员,需要先new一个内部类对象,再通过指向这个对象的引用来访问。

(2)静态内部类:将内部类声明为static,也叫作嵌套类。

与静态方法类似,只能访问外部类的static成员,不能直接访问实例变量和实例方法,需要通过对象引用。

静态内部类中可以包括static成员和方法。

public class Outer{
private static class Inner{
//name of this class is Outer.Inner
}
private Inner x;
public Outer(){
x=new Inner();}
public static void main(String[] a) {
Inner x = new Inner();
new Outer();
}
}

(3)局部内部类:在method或者statement中定义的类。

局部内部类与局部变量类型,不能使用private、public等访问修饰符,也不能使用static,可以使用final和abstract

局部内部类只在这个方法之内有效。

局部内部类可以访问外部类成员。

(4) 匿名内部类:就是没有名字的局部内部类,不用关键字class、extend、implement,没有constructor。其根本是把类的定义和创建放在了一起,一般格式是

new ClassOrInterfaceName() {    } 

匿名内部类可以继承一个类或者实现一个接口。

匿名内部类使用的参数必须是final。

在生成的class文件中,匿名类会生成 类名$1.class 的文件,数字根据是第几个内部类而以此类推。

2. 内部类的继承

普通类extend内部类。因为内部类的constructor必须连接到指向外部类对象的引用,所以当一个类继承这个内部类的时候,那个连接到外部类的引用也要初始化。

class WithInner{
class Inner{}
} public class InheritInner extends WithInner.Inner {
InheritInner(WithInner wi){
wi.super();
}
public static void main(String[] args){
WithInner wi = new WithInner();
InheritInner ii = new InheritInner(wi);
}
}

每一个内部类可以独立的继承一个接口或者类,无论外围类是否继承了某个接口或者类,对内部类都没有影响。再加上java提出了一个类可以实现多个接口,所以内部类和接口解决了java不能多重继承的问题。这也是java和C++的区别之一,C++可以多重继承。

资料来源:感谢各位的分享,希望慢慢能了解透彻

http://www.tuicool.com/articles/n2aYra7

http://www.cnblogs.com/dolphin0520/p/3811445.html

http://android.blog.51cto.com/268543/384844/

http://www.cnblogs.com/mengdd/archive/2013/02/08/2909307.html

Java Inner class的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  3. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  4. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  5. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  6. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  7. 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用

    有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...

  8. Java多线程基础学习(二)

    9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...

  9. Java多线程基础学习(一)

    1. 创建线程    1.1 通过构造函数:public Thread(Runnable target, String name){}  或:public Thread(Runnable target ...

  10. c#与java的区别

    经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...

随机推荐

  1. poj3368Frequent values(RMQ)

    http://poj.org/problem?id=3368 追完韩剧 想起这题来了 想用线段树搞定来着 结果没想出来..然后想RMQ 想出来了 算是离散吧 把每个数出现的次数以及开始的位置及结束的位 ...

  2. Github是什么?看完你就了解一些了

    要了解Github,我们首先要知道Git,Git是管理代码的工具,写代码不是件轻松的事儿,一个人写的时候已经不轻松了,一群人写就更不轻松了,但这世界上很多事都是怎么不轻松怎么来的,大部分人都会和别人一 ...

  3. bzoj1670

    第一道凸包 采用Andrew算法,不论实现还是理解都非常简单 ..] of longint;     i,j,k,m,n:longint;     ans:double; procedure swap ...

  4. cgi ISAP sapi等

    1.CGI和FastCGI是apache处理php脚本的其中两种工作模式,还有ISAPI,SAPI等 2.而php-fpm并不是一种工作模式,而是一个PHP在FastCGI模式运行下的进程管理器,全称 ...

  5. [编译] g++ 与 Makefile

    g++ -c CppSoureFile -o ObjectCodeFile -c 编译而不链接 -lm 链接数学库 -static 生成静态链接的程序

  6. Azure Backup 入门

    Viswanath Tata 云 + Enterprise项目经理 Azure Backup是一款允许客户将数据备份到 Azure的强大工具.请参阅这篇文章,快速了解 Azure Backup.我 ...

  7. c程序设计语言_习题1-18_删除输入流中每一行末尾的空格和制表符,并删除完全是空格的行

    Write a program to remove all trailing blanks and tabs from each line of input, and to delete entire ...

  8. Android Activity管理类

    public class AppManager { private static Stack<Activity> activityStack; private static AppMana ...

  9. maven安装步骤

    第一步:配置maven环境 maven3 安装: 安装 Maven 之前要求先确定你的 JDK 已经安装配置完成.Maven是 Apache 下的一个项目,目前最新版本是 3.0.4,我用的也是这个. ...

  10. 使用Visual Studio 2013 从头构建Web表单

    在这篇文章中,我将采取VS 2013中特定的模板,也就是没有身份验证的Web表单模板,并说明如何构建这个项目从头开始.在本教程的最后,你会最终有一个模板,内容几乎是一样的使用Web表单模板没有认证(文 ...