Java中的三种内部类
来源:互联网 发布:java从入门到放弃系列 编辑:程序博客网 时间:2024/04/25 15:40
内部类
内部成员类:和成员方法并列,无static修饰
嵌入类:和成员方法并列,并且有static修饰
本地类:在成员方法中定义的类
实例如下:OuterClass是一个外部类,里面定义了三个内部类InnerClass、NestedClass、MethodClass分别对应上面三种内部类,还定义了一个不相关的类AnotherClass和一个public修饰的主类DemoClass,该文件名称为DemoClass.java。通过javac命令编译后,产生的各类如图所示,通过观察可知即使将类写在同一个java文件中,编译出的class文件也是独立命名的,只有内部类才会以$符号相连去命名。
import cn.oracle.inner.OuterClass.InnerClass;import cn.oracle.inner.OuterClass.NestedClass;class OuterClass{ //内部成员类 public class InnerClass { public void InnerMethod() { System.out.println("innerMethod"); } } //嵌套类 public static class NestedClass { public void nestMethod() { System.out.println("nestMethod"); } public static void snestMethod() { System.out.println("nestMethod"); } } public void method() { class MethodClass { //本地类 public void MethodMethod() { System.out.println("methodMethod"); } } new MethodClass().MethodMethod(); }}class AnotherClass{ public void anotherMethod() { System.out.println("anotherMethod"); }}public class DemoClass{ //内部类对象声明的两种写法 外部类名.内部类名 obj和内部类名 obj public static void main(String[] args) { OuterClass outerobj = new OuterClass(); //内部成员类对象创建的方法 OuterClass.InnerClass e_innerobj; InnerClass innerobj; e_innerobj = outerobj.new InnerClass(); innerobj = outerobj.new InnerClass(); //嵌套类对象创建的方法 OuterClass.NestedClass e_nestedobj; NestedClass nestedobj; e_nestedobj = new NestedClass(); nestedobj = new NestedClass(); e_nestedobj = new OuterClass.NestedClass(); nestedobj = new OuterClass.NestedClass(); }
非静态方法调用无疑是用对象去调用,所以只在下面说一下嵌套类中的静态方法的调用
如下所示,四种调用snestedMethod方法的方式都是正确的。
A :NestedClass nestedobj = new OuterClass.NestedClass(); nestedobj.snestedMethod();
B :OuterClass.NestedClass nestedobj = new OuterClass.NestedClass(); nestedobj.snestedMethod();
C :OuterClass.NestedClass.snestedMethod();
D :NestedClass.snestedMethod();
内部类的一点总结:
*三种内部类中只有嵌套类中可以定义静态方法
*本地类对象只能在其所定义的方法中创建
*内部成员类创建对象的方法:内部类对象 = 外部类对象.new 内部类()
*嵌套类创建对象的方法:内部类对象 = new 内部类() 或者 内部类对象 = new 外部类名称.内部类();
*嵌套类调用自己里面的静态方法有上述四种方式
*内部类导入到别的类中使用的时候引入的类路径写法 如 import cn.oracle.inner.OuterClass.InnerClass;import cn.oracle.inner.OuterClass.NestedClass;
*通过反射不能获取到本地类的class对象,通过反射的Class.forname()获取内部类的class对象,类路径应该写为Class clazz = Class.forName("cn.oracle.inner.OuterClass$InnerClass");
以上总结均为博主自己试验所得结果无法保证100%正确性,如有不同见解请在下面留言即可,共同学习进步。
阅读全文
0 0
- Java中的三种内部类
- java中的内部类
- JAVA中的内部类
- java 中的内部类
- java中的内部类
- Java中的内部类
- JAVA 中的内部类
- java中的内部类
- java 中的内部类
- java中的内部类
- Java中的内部类
- java中的内部类
- Java 中的内部类
- java 中的内部类
- java中的内部类
- Java中的内部类
- java中的内部类
- Java中的内部类
- React组件生命周期
- 三.SpringBoot集成实例系列-注解型单数据源mybatis
- uoj274 温暖会指引我们前行
- “无法找到xxx.exe的调试信息,或者调试信息不匹配。未调用调试信息生成二进制文件……”问题的解决办法
- Java运算符
- Java中的三种内部类
- 关于major和无人驾驶的一点想法(写给一个微信群)
- Elasticsearch & plugins(ELK+kafka+filebeat) 安装教程
- textfield datepicker作为响应者、自定义toolbar方法
- OAI搭建之SIM卡
- 欢迎登陆页面!
- 解决:ubuntu16.04启动时长时间停留在紫屏或跳文本的黑屏界面
- CCF201409-3 字符串匹配 初级KMP 一句判断大小写锁定
- 中译日练习