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#多用于业务系统的开发 ...
随机推荐
- Oracle Form Developer: Folder FRM-99999 Error 14212
Question: 做FOLDER文件夹功能,打开FORM错误提示: FRM-99999:出现1412错误.有关该错误的详细信息,请参阅发行说明文件(relnotes) Answer: 原因是FOLD ...
- 普通pc电脑安装苹果系统mac_详细教程(精)附带所有工具下载
苹果操作系统只允许在苹果电脑上面安装和使用.和Windows不一样,要在PC上安装,需要一系列的模拟和破解.破解安装的过程很繁琐而具有挑战性,以下是安装10A432雪豹的PC安装指南,附带25张图片帮 ...
- c语言时间库函数#include<time.h>
日期与时间函数<time.h> 头文件<time.h>中说明了一些用于处理日期和时间的类型和函数.其中的一部分函数用于处理当地时间,因为时区等原因,当地时间与日历时间可能不相同 ...
- 基于DDD的现代ASP.NET开发框架--ABP系列之2、ABP入门教程
基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boi ...
- diamond专题(四)—— 容灾机制
大家好,本次为大家带来diamond的容灾机制. diamond之所以表现的稳定可靠,除了架构简单之外,另一个重要原因是diamond具有一套完备的容灾机制,容灾机制涉及到client和server两 ...
- AndroidStudio旧模板使用方法
***AndroidStudio旧模板使用方法*** 解压后用BlankActivity文件夹替换AndroidStudio安装目录下plugins\android\lib\templates\act ...
- POJ 3279 Fliptile (质量不错)
题意:有一个M*N的棋盘,每一个格子只有两种状态0或1,每次可以选择一个格子执行翻转操作,并且与该格子相邻的4个格子都会被翻转,求将所有格子都翻转成0所需要的最小操作数,若有多种方案,输出字典序最小的 ...
- 定时备份为Sharepoint做网站备份,并删除指定日期的备份
一.创建bat文件 @echo cd \ c: cd "Program Files\Common Files\Microsoft Shared\web server extensions\1 ...
- 【解决】python2.x版本的Django下admin管理页面css无效
折腾一下午,终于解决了这个问题,有必要记录一下,我就奇怪了为什么实验室电脑没问题,到宿舍就挂掉了,哼 主要是改mimetypes文件,位于D:\MySoftware\Python27\Lib下 1.添 ...
- Hive 0.12 Caused by: MetaException(message:Version information not found in metastore. )解决方法
配置完成Mysql存储元数据信息,启动后测试show tables报错ERROR exec.DDLTask: org.apache.hadoop.hive.ql.metadata.HiveExcept ...