内部类;了解外部类 并能与之通信 内部类写出来的代码更加整洁与优雅
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