java内部类
内部类存在的意义
1、可以实现多重继承
个特点非常重要,个人认为它是内部类存在的最大理由之一。正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。比如我们实现一个接口就必须实现它里面的所有方法。而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类
2、 避免修改接口而实现同一个类中两种同名方法的调用。
大家假想一下如果,你的类要继承一个类,还要实现一个接口,可是你发觉你继承的类和接口里面有两个同名的方法怎么办?你怎么区分它们??这就需要我们的内部类了
3、
内部类可以很好的实现隐藏
一般的非内部类,是不允许有 private 与protected权限的,但内部类可以
特点
内部类拥有外围类的所有元素的访问权限。
内部类可以分为:实例内部类、静态内部类和成员内部类
内部类的特点如下:
- 内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的 .class 文件,但是前面冠以外部类的类名和 $ 符号。
- 内部类不能用普通的方式访问。内部类是外部类的一个成员,因此内部类可以自由地访问外部类的成员变量,无论是否为 private 的。
- 内部类声明成静态的,就不能随便访问外部类的成员变量,仍然是只能访问外部类的静态成员变量
实例内部类是指没有用 static 修饰的内部类
1、在外部类的静态方法和外部类以外的其他类中,必须通过外部类的实例创建内部类的实例。
2、在实例内部类中,可以访问外部类的所有成员。
3、在外部类中不能直接访问内部类的成员
4、在实例内部类中不能定义 static 成员,除非同时使用 final 和 static 修饰。
静态内部类是指使用 static 修饰的内部类
1、在创建静态内部类的实例时,不需要创建外部类的实例。
2、静态内部类中可以定义静态成员和实例成员
3、外部类以外的其他类需要通过完整的类名访问静态内部类中的静态成员,如果要访问静态内部类中的实例成员,则需要通过静态内部类的实例。
4、静态内部类可以直接访问外部类的静态成员,如果要访问外部类的实例成员,则需要通过外部类的实例去访问。
局部内部类是指在一个方法中定义的内部类
1、局部内部类与局部变量一样,不能使用访问控制修饰符(public、private 和 protected)和 static 修饰符修饰。
2、局部内部类只在当前方法中有效。
3、局部内部类中不能定义 static 成员。
4、 局部内部类中还可以包含内部类,但是这些内部类也不能使用访问控制修饰符(public、 private 和 protected)和 static 修饰符修饰。
5、在局部内部类中可以访问外部类的所有成员。
6、在局部内部类中只可以访问当前方法中 final 类型的参数与变量。如果方法中的成员与外部类中的成员同名,则可以使用 <OuterClassName>.this.<MemberName> 的形式访问外部类中的成员。
public class Test { int a=0; int d=0; public void method() { int b=0; final int c=0; final int d=10; class Inner { a2=a; //访问外部类中的成员 //intb2=b; //编译出错 int c2=c; //访问方法中的成员 int d2=d; //访问方法中的成员 int d3=Test.this.d; //访问外部类中的成员 } Inner i=new Inner(); System.out.println(i.d2); //输出10 System.out.printIn(i.d3); //输出0 } public static void main(String[] args) { Test t=new Test(); t.method(); } }
相关文章
- 【转】Java内部类详解
- 什么是JAVA内部类?
- java.lang.NoClassDefFoundError: org/springframework/core/metrics/ApplicationStartup
- Java 岗面经:两年半经验,面 10 个公司,经 28 轮面试,拿 9 个 offer,涨麻了。
- Java内部类及内部接口
- 第43节:Java学前要点
- Java内部抽象类的匿名类初始化
- 基于Java实现(图形界面)进程存储管理系统【100010281】
- 【Java基础】全面讲解Java中的各种锁
- Java内部类
- Java学习-015-CSV 文件写入实例源代码
- (JAVA):四种内部类的细节理解,文字+代码会更好理解----第三部分重点
- Java并发编程:并发容器之ConcurrentHashMap(转载)
- Java基础篇:内部类详解
- Java魔法堂:内部类详解
- JAVA学习:成员内部类基本概念及用法
- JAVA学习:成员内部类基本概念及用法
- java 文件读写demo
- @Java web程序员,在保留现场,服务不重启的情况下,执行我们的调试代码(JSP 方式)
- Java内部类(Java源码中 内部类 的分析使用)
- Java抽象类接口、内部类题库
- Java HttpClient 如何使用代理IP请求接口
- Java //PP2.8 编写一个应用程序,以小时、分、秒读取时间长度,然后全部换算成秒并打印输出结果(例如,1小时28分42秒等于5322秒)
- Java 对象间关系(依赖、关联、聚合和组合)