Java之我们为什么使用内部类

为什么要使用内部类?

在我们学习内部类的过程中,我们尝试问这样一个问题,为什么要使用内部类呢?想要回答这个问题,我们今天来向大家解答这个疑惑。
在一般情况下,内部类继承自某个类或者实现某个接口,内部类的代码操作创建它的外围类的对象。
显然,原因不能这么简单,如果只是这样的原因的话,我们可以直接使用外围类来进行实现,但这样在满足需求的情况下,可以这样做,但这样会有点不足就是:外围类实现这个接口不是总能够享用接口带来的方便,有时还要用到接口的实现,而内部类有这样的一个让人不得不去使用的原因:每个内部类都能够独立的继承自一个(接口)的实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类并没有影响。
更多的是内部类对多重继承的实现,使多重继承得到了保障,或者说更加便利。
接下来我们需要考虑这样一个问题:必须在一个类当中以某种方式实现两个接口。
如果你想的解决方案准确的话,应该有两种。
(1)使用单一类
(2)使用内部类
这都可以,我们看实现:

interface A{}
interface B{}
class X implements A,B{
}
class Y implements A{
	B makeB() {
		//Anonymous inner class(匿名内部类)
		return new B(){};
	}
}
public class MultiInterfaces {
	static void takesA(A a) {}
	static void takesB(B b) {}
	public static void main(String[] args) {
		X x = new X();
		Y y = new Y();
		takesA(x);
		takesA(y);
		takesB(x);
		takesB(y.makeB());		
	}
}

但是这毕竟只是对接口的实现,更多的内部类的优势在于如果我们拥有的是抽象的类或者具体的类,而不是接口,那么我们只能去使用内部类了,我们看这段代码就可以知道:

class D{}
abstract class E{}
class Z extends D{
	E makeE() {
		return new E() {};
	}
}
public class MultiImplementation {
	static void takesD(D d) {}
	static void takesE(E e) {}
	public static void main(String[] args) {
		Z z = new Z();
		takesD(z);
		takesE(z.makeE());
	}
}

当我们没有出现多重继承的问题时,我们编码的方式有很多种,但是

如果使用内部类有什么优势呢?

那么为了解决小伙伴们的时间,笔者花费时间为大家做出总结:
(1)内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立。
(2)在单个外围类当中,可以让多个内部类以不同的方式实现同一接口。
(3)创建内部类对象的时刻并不依赖于外围类对象的创建。
(4)内部类没有让人感到迷惑的“is-a”关系;它就是一个独立的实体。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值