内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
1,内部类的创建 内部类是创建在类中的
package com.wj.InsideClass; /* * 内部类的创建 */ public class CreateInsideClass { public CreateInsideClass() { // 在构造方法中处理内部类 new Demo("百合不是茶", "1234").getAll(); } public static void main(String[] args) { // 创建对象 new CreateInsideClass(); } // 内部类 class Demo { String userName; String userpwd; // 构造方法处理 public Demo(String userName, String userpwd) { this.userName = userName; this.userpwd = userpwd; } // 打印数据 public void getAll() { System.out.println("用户名:" + userName + "<><><>用户密码" + userpwd); } } }
运行结果:
用户名:百合不是茶<><><>用户密码1234
分析:在CreateInsideClass 类中创建内部类 ,在CreateInsideClass 的构造方法中new内部类的对象,并调用内部类的方法
2,内部类与外部类的关系;
package com.wj.InsideClass; /* * 内部类的创建 */ public class CreateInsideClass { String str="java";//创建属性 内部类输出 public CreateInsideClass() { // 在构造方法中处理内部类 new Demo("百合不是茶", "1234").getAll(); } public static void main(String[] args) { // 创建对象 new CreateInsideClass(); //System.out.println(m);外部类不可以访问内部类的属性 } // 内部类 class Demo { String userName; String userpwd; String m="android";//外部类输出 // 构造方法处理 public Demo(String userName, String userpwd) { this.userName = userName; this.userpwd = userpwd; System.out.println(str);//内部类可以访问外部类的属性 } // 打印数据 public void getAll() { System.out.println("用户名:" + userName + "<><><>用户密码" + userpwd); } } }
运行结果:
m cannot be resolved to a variable
外部类不可以访问内部类的数据
注释掉:
//System.out.println(m);外部类不可以访问内部类的属性
再执行:
获得外部类的数据:java
用户名:百合不是茶<><><>用户密码1234
3作用域中的内部类: 指作用范围
package com.wj.InsideClass; import java.util.ArrayList; /** * @author Administrator 作用域的范围 */ public class InnerFiled { // 创建方法 public void getDeta() { final Long l1 = System.currentTimeMillis(); System.out.println("1<><><" + l1); // 内部类操作 class Demos { // 内部类的方法 public void getDeta1() { // 使用队列模拟数据添加 ArrayList<Long> list = new ArrayList<Long>(); for (long i = 0; i < 10000; i++) { list.add(i); } Long l2 = System.currentTimeMillis(); System.out.println("<><><>" + l2); Long Ln = l2 - l1; System.out.println(Ln); } } // 在作用域中创建对象 Demos dm = new Demos(); dm.getDeta1();// 调用内部类的方法 } public static void main(String[] args) { // 创建对象,调用方法 new InnerFiled().getDeta(); } }
分析:在方法的作用域中创建类和对象,并且调用内部类的方法,这个内部类的作用域只在这个方法之内,
运行结果:
1<><><1427179803697
<><><>1427179803728
31
4,匿名内部类
package com.wj.InsideClass; import java.util.ArrayList; import java.util.List; /** * * @author Administrator 匿名内部类 * @param <InnerClass> */ public class NoNameClass { public long getFrist() { final Long l1 = System.currentTimeMillis(); System.out.println("1<><><" + l1); List list = new ArrayList(); for (long i = 0; i < 100000; i++) { list.add(i); } return l1; } // 创建方法,实现接口 public InitInner getDeta() { // 匿名内部类 return new InitInner() { // 实现接口额方法 public long getDataInner() { long l2 = System.currentTimeMillis(); System.out.println(l2); return l2; } }; } // 定义接口 interface InitInner { public long getDataInner(); } // 主函数 public static void main(String[] args) { // 创建对象 调用方法 NoNameClass name = new NoNameClass(); long l = name.getFrist(); // 调用匿名内部类的方法 long i = name.getDeta().getDataInner(); System.out.println("总耗时:" + (i - l)); } }
运行结果:
1<><><1427186660645
1427186660660
总耗时:15