嵌套类
在java编程中,嵌套类就像类里面的方法一样。一个类可以有多个方法,同样地,也可以拥有多个嵌套类。因为,当我们看到一个类里面,看到另一个类藏身于里面,就不要再觉得奇怪了。寄生的那个类,就叫做嵌套类。那个包括嵌套类的宿主类叫外部类。
嵌套类下面再分内部类与静态内部类
内部类(非静态嵌套类)
内部类是java的一种安全机制。我们都知道一个类不能直接被声明为私有。如Inner.java 。源码里面的class Inner 不能定成private class Inner{};但是如果Inner这个类作为其它类的一个成员,那么此时Inner就可以用private来修饰了。
package learn;
public class Out {
private class Inner {
}
}
内部类一般有三种玩法。当然,取决你如何去玩它。
-
内部类
-
方法内部类
-
匿名内部类
看我设计的一个内部类
package learn;
public class Out {
private final Inner inner = new Inner();
public int getMoney(int askMoney) {
inner.open();
int money = inner.take(askMoney);
return money;
};
public String putMoney(int putMoney) {
inner.open();
boolean flag = inner.store(putMoney);
if (flag) {
return "成功存钱:" + putMoney;
} else {
return "存钱失败!";
}
}
/**
*
* 这是内部流程,不方便让外面的人知道的。
*
*/
private class Inner {
// 钱财不外露
private int totalMoney;
//
void open() {
System.out.println("打开钱柜...");
}
// 取钱的实现
int take(int askMoney) {
totalMoney = totalMoney - askMoney;
return askMoney;
}
// 存钱的实现
boolean store(int putMoney) {
totalMoney = totalMoney + putMoney;
return true;
}
}
}
用户在使用Out提供的存钱,取钱的服务时,根本不知道Out内部是有一个Inner这样一个管家在工作的。这样,具体实现细节就被保护起来了。我们大名鼎鼎的JDBC数据库连接,就是使用了这样一种方式去获取数据库连接。
Out o = new Out();
o.putMoney(1000);
o.getMoney(500);
当然我也看到有人这样玩的。把inner的private开放性打开。然后
Out o = new Out();
//某人通过生意往来认识o
o.putMoney(1000);
o.getMoney(500);
//某人和o关系密切,从o手里拿到了钥匙
Out.Inner inner = o.new Inner();
inner.open();
inner.take(100000);
这看起来像啥?外面的用户通过中间人o收卖了inner这个管家,然后从管家手拿走了100000。真是日防夜防,家贼难防!
不过,在正常的使用中,我没看到是那样用的。所以,你干脆不知道这一点为好。就如我之前的示范,上来就把Inner签保密协议,变成private。
方法内部类
暂缺。
静态内部类
暂缺。