`
wangqisen
  • 浏览: 46961 次
文章分类
社区版块
存档分类
最新评论

java编程思想笔记--内部类部分七

 
阅读更多

1.为什么我们需要内部类的存在?这是因为,在java的设计规范中,出于面向对象的逻辑清晰得角度考虑,java的设计者禁止了西加加中常见的多重继承的现象,限制java类只能继承一个父类。为了弥补多重继承被禁止带来的影响,java提出了接口的概念,但是,内部类的提出则进一步完善了这个方案。这是因为,按照java编程思想中的原话来说,内部类最吸引人的地方在于,每个内部类都能独立的继承自一个实现,所以无论外围类是否已经继承了某个实现,对于内部类都没有影响。

举个例子,

package test;

interface p204_A{}
interface p204_B{}

class X implements p204_A,p204_B{}
class Y implements p204_A{
	p204_B makeB(){
		return new p204_B(){
			
		};
	}
}
public class p204 {
	static void takesA(p204_A a){}
	static void takesB(p204_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());
	}
}
如果单纯的看,其实X和Y两种实现接口的方式都很正确。但是,在一些其他情行下,内部类可以做到接口同学儿做不到的。例如如下:

package test;

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

如上,如果拥有的是抽象的类或者具体的类,而不是接口,那就只能使用内部类才能实现多重继承。(lz在这里插一句话,考研复试的时候,还装逼给老师说,java中出于安全性考虑,不允许多重继承,真是too simple,too naive。)



分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics