Java - Inner classes

嵌套类

在java编程中,嵌套类就像类里面的方法一样。一个类可以有多个方法,同样地,也可以拥有多个嵌套类。因为,当我们看到一个类里面,看到另一个类藏身于里面,就不要再觉得奇怪了。寄生的那个类,就叫做嵌套类。那个包括嵌套类的宿主类叫外部类。

131521_hEB3_1583879.jpg

嵌套类下面再分内部类与静态内部类

内部类(非静态嵌套类)

内部类是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。

方法内部类

暂缺。

静态内部类

暂缺。

 

转载于:https://my.oschina.net/zhouhaojie/blog/530297

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值