java定义内部类
2014-03-26 14:43
330 查看
package test.jdk; public class InnerTest { private String instAtt = "实例变量"; private static String staticAtt = "静态变量"; public void test() { int methodAtt = 1; final int methodFinalAtt = 2; // 非静态方法里的内部类 class staticMethodInnerClass { @Override public String toString() { // 非静态方法里无法访问实例的外部变量 System.out.println("非静态方法的内部类可以访问外部类的实例变量:" + instAtt); System.out.println("非静态方法的内部类可以访问外部类的静态变量:" + staticAtt); // 非静态方法里无法访问方法的非final的变量 // System.out.println(methodAtt); System.out.println("非静态方法的内部类可以访问方法的final变量:" + methodFinalAtt); return "my nickname is white"; } } new staticMethodInnerClass().toString(); new Object() { @Override public String toString() { System.out.println("非静态方法的匿名内部类可以访问外部类的实例变量:" + instAtt); System.out.println("非静态方法的匿名内部类可以访问外部类的静态变量:" + staticAtt); //静态方法里匿名内部类无法访问方法的非final的变量 // System.out.println(methodAtt); System.out.println("非静态方法的匿名内部类可以访问方法的final变量:" + methodFinalAtt); return "我是匿名内部类"; } }.toString(); } public static void main(String blackbat[]) { int methodAtt = 1; final int methodFinalAtt = 2; //静态方法里的内部类 class staticMethodInnerClass { @Override public String toString() { //静态方法里无法访问实例的外部变量 // System.out.println(instAtt); System.out.println("静态方法的内部类可以访问外部类的静态变量:" + staticAtt); //静态方法里无法访问方法的非final的变量 // System.out.println(methodAtt); System.out.println("静态方法的内部类可以访问方法的final变量:" + methodFinalAtt); return "my nickname is white"; } } new staticMethodInnerClass().toString(); new Object() { @Override public String toString() { //静态方法的匿名内部类不能访问外部类的非静态变量 // System.out.println("非静态方法的匿名内部类可以访问外部类的非静态变量:" + instAtt); System.out.println("非静态方法的匿名内部类可以访问外部类的静态变量:" + staticAtt); //静态方法里匿名内部类无法访问方法的非final的变量 // System.out.println(methodAtt); System.out.println("非静态方法的匿名内部类可以访问方法的final变量:" + methodFinalAtt); return "我是匿名内部类"; } }.toString(); new InnerTest().test(); // 建立静态内部类(static Inner Class)的对象 ImOutClass.StaticInnerClass staticIC = new ImOutClass.StaticInnerClass(); staticIC.access(); /* * 建立非静态内部类(non-static Inner Class)的对象. <br>注意这种建立对象的格式 首先创建外部类的对象 然后使用对象.new 来创建。 */ ImOutClass outC = new ImOutClass(); ImOutClass.InstInnerClass inC = outC.new InstInnerClass(); inC.access(); } } class ImOutClass { private static String staticAtt = " 外部类的类变量 "; private String instAtt = " 外部类的实例变量 "; private static String xx = "外部静态变量"; // private String xx = "外部类的实例变量"; // 外部类的非静态方法 public void instanMethod() { System.out.println(" 和外部类实例方法 "); } // 外部类的静态方法 public static void staticMethod() { System.out.println(" 和外部类静态方法 "); } //静态内部类(static Inner Class) public static class StaticInnerClass { public StaticInnerClass() { System.out.println(" 我是静态内部类 "); } public void access() { System.out.println(" 我可以访问 " + staticAtt); staticMethod(); System.out.println(" 我可以访问外部的静态变量 " + xx); // 非静态的方法 instanMethod() 无法从静态的地方使用 // instanMethod(); } } // 非静态内部类(non-static Inner Class) public class InstInnerClass { public InstInnerClass() { System.out.println(" 我是成员级内部类,非静态内部类"); } public void access() { System.out.println(" 我可以访问 " + instAtt); instanMethod(); staticMethod(); System.out.println(" 我可以访问外部的静态变量 " + xx); } } }
相关文章推荐
- Java Callable接口应用举例
- java 浮点数格式处理DecimalFormat用法
- 要点Java16 抽象类
- java.lang.NoClassDefFoundError: org/hibernate/service/jta/platform/spi/JtaPlatform
- 强大的java编程实现邮件发送功能,支持内容,上传多个图片和多个附件
- jdk的安装部署及测试
- Java Native Interface Specification—Contents
- 关于Java的static关键字
- java必备——进程?线程?
- spring 和 struts 整合
- MyEclipse8.6注册码
- java中常用的字符串的截取方法
- JVM(Java虚拟机)优化大全和案例实战
- 希尔排序----java实现
- 用JAVA代码实现ARP攻击
- 希尔排序----java实现
- java 集合类 之 Set
- java生成指定长度的随机字符串
- java笔记之分支、循环语句
- spring对hibernate批量操作的支持