成员内部类总结与静态内部类详述
来源:互联网 发布:php socket服务器框架 编辑:程序博客网 时间:2024/06/11 21:04
成员内部类总结
由上一篇《java中的成员内部类》大致了解了成员内部类的一些相关知识,在此总结一下(详细 请见上一篇:《java中的成员内部类》):
1、内部类可以直接访问外部类的所有数据,包括私有数据(即用private修饰的成员变量或方法)。
2、内部类可以使用任意访问控制符。
3、外部类不能直接访问内部类的成员变量和方法(即使内部类的成员变量和方法均被public修饰),如需访问应先创建内部类的对象,之后通过内部类的对象来访问其成员变量和方法,
例:外部类为HelloWorld ,内部类为Inner 。
那么创建内部类:(1):创建外部类对象hello HelloWorld hello = new HelloWorld();
(2):创建内部类对象inHelloWorld.Inner in = hello.new Inner(); 或者使用;Inner in = hello.new Inner();
4、若外部类和内部类具有相同命名的成员变量和方法,内部类默认访问自己的成员变量和方法,如要访问外部类的成员变量或方法需要使用this关键字;
例:外部类为HelloWorld ,内部类为Inner 。同名成员变量为name。
内部类访问其自己的name:直接使用name 或this.name
访问外部类的name: HelloWorld.this.name
5、带内部类的外部类编译后会生成两个.class文件:HelloWorld.class 与 HelloWorld$Inner.class
静态内部类
在此基础上我们可以继续深入思考:既然内部类可以直接调用外部类的成员变量和方法,那么如果内部类为静态时(即有修饰符static)会怎样?
(我们知道,静态的类不能调用非静态的方法,同样static成员不能访问非static的成员)
静态内部类:即用static修饰的内部类
特点:
1、如果外部类的静态成员与内部类的成员同名(无论该内部类的成员是否为静态)可通过“类名.静态成员名”访问外部类静态成员【见代码第17行】。如果外部类有静态成员且与内部类的成员名不同时(无论该内部类的成员是否为静态),可以通过成员名直接调用外部类的静态成员【见代码第16行】
(注:即使外部类不是静态类,也可以在外部类中声明静态成员,这表明外部类与普通的类是一致的)。
2、静态内部类可以直接访问外部类的静态成员与静态方法,而不能直接访问外部的非静态成员,但可以通过 "new 外部类().成员"的方式访问外部非静态成员。
【见代码第18行】。
3、创建内部静态对象时不需要外部的对象,可以直接创建:内部类 对象名 = new 内部类();【见代码第25-28行】
除此静态类内部的使用限制:(详见:http://blog.sina.com.cn/s/blog_5da93c8f0100wib7.html )
1、在非静态内部类中不可以声明静态成员
如现在在一个外部类HelloWorld类中定义了一个内部类Inner,如果没有将这个内部类用static关键字修饰,既没有定义为静态类,那么在这个类内部中如果要利用static关键字来修饰某个成员方法或者变量是不允许的。在编译的时候无法通过。故应注意:只有静态内部类才能够定义静态的成员变量与成员方法。
(在外部类中即使外部类没有被static修饰即不是静态外部类,其外部类的成员变量也可以定义为static,这一点与内部类不同。上面的特点1已经 用到但未细说,这表明外部类与普通类是一致的)
代码实例:(来源:慕课网)
- 成员内部类总结与静态内部类详述
- 静态内部类与成员内部类
- 成员内部类局部内部类静态内部类匿名内部类总结
- 成员内部类、成员静态内部类
- 成员内部类和静态内部类
- java内部类之成员内部类、静态内部类
- 内部类 静态内部类 成员内部类 局部内部类 匿名内部类
- Java 内部类(成员内部类、局部内部类、静态内部类和匿名内部类)
- 内部类(静态内部类 成员内部类 局部内部类 匿名内部类)
- 内部类---(静态内部类、成员内部类、匿名内部类、局部内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、局部内部类、静态内部类、匿名内部类)
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- Java内部类(成员内部类、静态内部类、局部内部类、匿名内部类)小结
- 内部类:成员内部类,局部内部类,静态内部类,匿名内部类
- Java内部类总结之成员内部类和静态内部类
- 数组 Longest Consecutive Sequence
- PHP 定时任务
- 动态连接库和静态连接库有什么区别?
- 数据库迁移(SQL SERVER导入数据到MySql)
- Kafka Producer APIs
- 成员内部类总结与静态内部类详述
- leetcode || 70、 Climbing Stairs
- sql server 日期格式化
- PHP-第4节数学
- C++ 网络套接字编程TCP和UDP实例
- Android测试方案
- 编写无警告的代码
- Spinner控件的使用
- makeObjectsPerformSelector使用方法及简介