Java内部类与静态内部类
http://hi.baidu.com/zhumulangma/item/bcd478c140427b2cef466532
定义在一个类内部的类叫内部类,包含内部类的类称为外部类。内部类可以声明public、protected、private等访问限制,可以声明 为abstract的供其他内部类或外部类继承与扩展,或者声明为static、final的,也可以实现特定的接口。外部类按常规的类访问方式使用内部 类,唯一的差别是外部类可以访问内部类的所有方法与属性,包括私有方法与属性。
(1)创建实例
OutClass.InnerClass obj = outClassInstance.new InnerClass(); //注意是外部类实例.new,内部类
AAA.StaticInner in = new AAA.StaticInner();//注意是外部类本身,静态内部类
(2)内部类中的this
内 部类中的this与其他类一样是指的本身。创建内部类对象时,它会与创造它的外围对象有了某种联系,于是能访问外围类的所有成员,不需任何特殊条件,可理 解为内部类链接到外部类。 用外部类创建内部类对象时,此内部类对象会秘密的捕获一个指向外部类的引用,于是,可以通过这个引用来访问外围类的成员。
(3)外部类访问内部类
内部类类似外部类的属性,因此访问内部类对象时总是需要一个创建好的外部类对象。内部类对象通过‘外部类名.this.xxx’的形式访问外部类的属性与方法。如:
System.out.println("Print in inner Outer.index=" + pouter.this.index);
System.out.println("Print in inner Inner.index=" + this.index);
(4)内部类向上转型
内部类也可以和普通类一样拥有向上转型的特性。将内部类向上转型为基类型,尤其是接口时,内部类就有了用武之地。如果内部类是private的,只可以被它的外部类问,从而完全隐藏实现的细节。
(5)方法内的类
方法内创建的类(注意方法中也能定义类),不能加访问修饰符。另外,方法内部的类也不是在调用方法时才会创建的,它们一样也被事先编译了。
(6)静态内部类
定义静态内部类:在定义内部类的时候,可以在其前面加上一个权限修饰符static。此时这个内部类就变为了静态内部类。
通常称为嵌套类,当内部类是static时,意味着:
[1]要创建嵌套类的对象,并不需要其外围类的对象;
[2]不能从嵌套类的对象中访问非静态的外围类对象(不能够从静态内部类的对象中访问外部类的非静态成员);
嵌 套类与普通的内部类还有一个区别:普通内部类的字段的字段与方法,只能放在类的外部层次上,所以普通的内部类不能有static数据和static字段, 也不能包含嵌套类。但是在嵌套类里可以包含所有这些东西。也就是说,在非静态内部类中不可以声明静态成员,只有将某个内部类修饰为静态类,然后才能够在这 个类中定义静态的成员变量与成员方法。
另外,在创建静态内部类时不需要将静态内部类的实例绑定在外部类的实例上。普通非静态内部类的 对象是依附在外部类对象之中的,要在一个外部类中定义一个静态的内部类,不需要利用关键字new来创建内部类的实例。静态类和方法只属于类本身,并不属于 该类的对象,更不属于其他外部类的对象。
(7)内部类标识符
每个类会产生一个.class文件,文件名即为类名。同样,内部类也会产生这么一个.class文件,但是它的名称却不是内部类的类名,而是有着严格的限制:外围类的名字,加上$,再加上内部类名字。
(8)为何要用内部类?
1. 内部类一般只为其外部类使用;
2. 内部类提供了某种进入外部类的窗户;
3. 也是最吸引人的原因,每个内部类都能独立地继承一个接口,而无论外部类是否已经继承了某个接口。因此,内部类使多重继承的解决方案变得更加完整。
静态内部类可以直接创建对象new B.C();如果内部类不是静态的,那就得这样B b = new B();B.C c = b.new C();
转载于:https://www.cnblogs.com/ttjava/p/3640892.html
Java内部类与静态内部类相关推荐
- Java内部类介绍 - 静态内部类和成员内部类
文章目录 内部类 内部类概述 静态内部类 成员内部类 内部类 内部类概述 内部类就是定义在一个类里面的类,里面的类可以理解成(寄生),外部类可以理解成(宿主). // 外部的People类可以理解成宿 ...
- java内部类和静态内部类的区别
1 相同点 使用的时候,import的时候,除了包名,还要带外部类. 2 不同点 2.1 对象创建的方式不同 静态内部类创建对象的时候,独立于外部类及其对象,就好像它是一个独立的类,可以和外部类一样使 ...
- java 内部类和静态内部类的区别
private class InnerClass { // 只有在静态内部类中才能够声明或定义静态成员 // private static String tt = &q ...
- Java面试题—内部类和静态内部类的区别
内部类和静态内部类的区别 内部类: 1.内部类中的变量和方法不能声明为静态的. 2.内部类实例化:B是A的内部类,实例化B:A.B b = new A().new B(). 3.内部类可以引用外部类的 ...
- android访问静态内部类,Java 内部类详解
一 内部类是什么 Java类中不仅可以定义变量和方法,还可以定义类,这样定义在类内部的类就被称为内部类.根据定义的方式不同,内部类分为静态内部类,成员内部类,局部内部类,匿名内部类四种. Java为什 ...
- java 内部类_java的内部类和静态内部类(嵌套类)
背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类.在codeReview的时候稍微和大家聊了一下.尤其是Static 修饰类和修饰对象和变量不一样呢 ...
- Java 内部类、局部内部类、静态内部类使用
1.上代码: //局部内部类.静态内部类.匿名类接口仅仅解决了多继承的部分问题,内部类有效实现了多重继承package ClassN1;public final class InnerClass {p ...
- java 静态内部类 内部类_Java中内部类和静态内部类的区别
内部类和静态内部类 示例 public class OuterClass { private int numPrivate = 1; public int numPublic = 2; public ...
- java静态内部类有什么好处6_java的内部类和静态内部类(嵌套类)
背景 开发新项目,写Swager的mode的时候用到了嵌套Model,于是在代码中,出现了静态内部类.在codeReview的时候稍微和大家聊了一下.尤其是Static 修饰类和修饰对象和变量不一样呢 ...
最新文章
- 上传程序网站至服务器
- 黑苹果hp有声音hdmi无声音_黑科技!不戴耳机也能独享声音!以色列公司推出无耳机传输音乐...
- 噪音声压和声功率的区别_南昌汽车隔音,深入了解汽车噪音的来源、危害以及解决方案...
- 请编写一个程序,使用字典存储学生信息,学生信息包括学号和姓名,请根据学号从小到大的顺序输出学生的信息。
- 微软官方及第三方SDK http://msdn.microsoft.com/zh-cn/jj923044
- 递归算法经典实例_【经典算法】利用递归方法求5!
- ftp改为sftp_ftp自动传输软件,ftp自动传输软件使用方法详细介绍
- @enableautoconfiguration注解作用_Spring Boot最核心的27个干货注解,你了解多少?
- 腾讯(Tencent)2022实习笔试算法题
- 基于融云直播 SDK,快速实现连麦布局(内附代码)
- Behavior Designer 中文版教程
- Simpson积分应用
- import java util_java里面import java.util.*;是什么用处?
- 云平台-多租户技术设计
- 余生很短,请珍惜 珍护 珍重
- 腾讯职场等级(转载自网络)
- Win7快速调整屏幕亮度最快的方法
- Pytorch版本过高产生的RuntimeError: Legacy autograd function with non-static forward method is deprecated.
- 关于相机坐标到投影空间坐标转换的理解
- 网络优化之“弱覆盖与过覆盖”
热门文章
- 笔记:Online robust principal component analysis via truncated nuclear norm regularization
- 【杂谈】有三AI季划成员的4大专属权益,你是否已经利用好了?
- 全球及中国自媒体行业营销模式及应用规模前景分析报告2021-2027年
- 全球及中国偶联单克隆抗体行业深度调研及项目风险评估报告2021-2027年
- 全球及中国模块化塑料带行业供需调查及产销形势预测报告2021-2027年版
- 地理标志农产品数据发布 特色产业对话农民丰收节交易会
- RHEL部署ipa红帽身份验证
- Rancher的简单部署和使用
- github托管代码
- 【转载】Gradle学习 第十一章:使用Gradle命令行