Java Inner class
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的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
- 【小程序分享篇 一 】开发了个JAVA小程序, 用于清除内存卡或者U盘里的垃圾文件非常有用
有一种场景, 手机内存卡空间被用光了,但又不知道哪个文件占用了太大,一个个文件夹去找又太麻烦,所以我开发了个小程序把手机所有文件(包括路径下所有层次子文件夹下的文件)进行一个排序,这样你就可以找出哪个 ...
- Java多线程基础学习(二)
9. 线程安全/共享变量——同步 当多个线程用到同一个变量时,在修改值时存在同时修改的可能性,而此时该变量只能被赋值一次.这就会导致出现“线程安全”问题,这个被多个线程共用的变量称之为“共享变量”. ...
- Java多线程基础学习(一)
1. 创建线程 1.1 通过构造函数:public Thread(Runnable target, String name){} 或:public Thread(Runnable target ...
- c#与java的区别
经常有人问这种问题,用了些时间java之后,发现这俩玩意除了一小部分壳子长的还有能稍微凑合上,基本上没什么相似之处,可以说也就是马甲层面上的相似吧,还是比较短的马甲... 一般C#多用于业务系统的开发 ...
随机推荐
- Cannot Create Supplier Site (Address) (文档 ID 1069032.1)
Error Address and Site Creation - Unable to create address and sites because of the following error ...
- bzoj3039
经典题目不多说 ..,..] of longint; l,r:..] of longint; i,j,n,m,ans:longint; x:char; function max ...
- 将win7电脑变身WiFi热点
转自:http://bbs.feng.com/read-htm-tid-2167498.html 开启windows 7的隐藏功能:虚拟WiFi和SoftAP(即虚拟无线AP),就可以让电脑变成无线路 ...
- HDU 1953
#include<stdio.h> #include<math.h> long long int euler(long long int n) { long long int ...
- Hadoop工程师面试题(1)--MapReduce实现单表汇总统计
数据源格式描述: 输入t1.txt源数据,数据文件分隔符"*&*",字段说明如下: 字段序号 字段英文名称 字段中文名称 字段类型 字段长度 1 TIME_ID 时间(到时 ...
- Worker工作者进程
- Laravel教程:laravel 4安装及入门
一.安装Composer首先你需要安装Composer,Composer是PHP依赖管理工具,Laravel框架就是使用 Composer 执行安装和依赖管理. 注:(1)若安装Composer出错, ...
- hdoj 1241 Oil Deposits
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- jquery实现公告上下滚动显示
js: // JavaScript Documentfunction b(){ t = parseInt(x.css('top')); y.css('top','19px'); x.animate({ ...
- SSIS执行SQL任务时加入参数
昨天开发的SSIS包中,获取ERP系统parttran表时,数据量比较大,达到255万多,因为SQL执行的关系,致使处理时效率很慢,所以就想用增量更新的方法处理该表数据.这是增量更新的SQL任务集合, ...