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. git获取远端版本库上的Tag (没有clone[远端的版本库太大了])

    方法一 http://stackoverflow.com/questions/25815202/git-fetch-a-single-commit The git fetch command deli ...

  2. ipconfig命令

    C:\Windows\System32>ipconfig -all Windows IP 配置 主机名 . . . . . . . . . . . . . : LuJunTao 主 DNS 后缀 ...

  3. Oracle系列之序列

    涉及到表的处理请参看原表结构与数据  Oracle建表插数据等等 语法结构:创建序列 create sequence sequence_name start with num increment by ...

  4. SQL语句优化方法

    1.1 注释使用 在语句中多写注释,注释不影响SQL语句的执行效率.增加代码的可读性. 1.2 对于事务的使用 尽量使事务处理达到最短,如果事务太长最好按功能将事务分开执行(如:可以让用户在界面上多几 ...

  5. c#浅谈反射内存的处理

    这段时间由于公司的项目的要求,我利用c#的反射的机制做了一个客户端框架.客户端里的所有的模块都是以一定形式进行提供,例如:FORM,UserControl. 在做的过程中很简单与愉快.具体的过程如下: ...

  6. isIOS9

    function isIOS9() { //获取固件版本 var getOsv = function () { var reg = /OS ((\d+_?){2,3})\s/; if (navigat ...

  7. 【转】Ubuntu更改语言环境设置

    原文网址:http://studiogang.blog.51cto.com/505887/385199 上午装了下Ubuntu 10.4,默认安装时选择的语言是english的,结果由于英语水平太次, ...

  8. 把USB打印机映射到LPT端口

    把USB打印机映射到LPT端口(pos小票机测试成功)2010-12-23 18:11:00| 分类: 編程 | 标签: |字号大中小 订阅 注释:在DOS命令行下运行以下命令(以下为示例,根据实际情 ...

  9. SQL_Server2005自动备份与删除—维护计划

    业务背景: 为了方便客户及时自动更新SAP库里面的数据与减少磁盘的空间.所以要在SQL对数据进行自动备份与删除备份.这样可以更加方便管理员的管理,和减少管理员的工作量. 解决思路: 在2005 SQL ...

  10. html input设置为只读属性

    有两种方式可以实现input的只读效果:disabled 和 readonly. 自然两种出来的效果都是只能读取不能编辑,可是两者有很大不同. Disabled说明该input无效,及其value不会 ...