本文的标题可能有一定的误导性,并不是说一般内部类就能实现多继承,显然这是不可能的。真正的意思是通过多继承来实现我们期望中的多继承的功能。
这里就拿人类来举例吧,人(Person)是一种生物(biology),而且是可移动(Moveable)的生物。我们可以定义如下两个类:
public class Biology {
public void die(){
System.out.println("生命是有限的,都有死亡的一天");
}
}
package com.pht.inner;
public class Moveable {
public void move(){
System.out.println("运动是永恒的,静止是想对的");
}
}
人要同时具有以上的两种特性,那么就需要定义一个人(Human)如下:
package com.pht.inner;
import com.pht.inner.Outer.Inner;
public class Human {
public void MoveableBiology(){
InnerHuman1 innerHuman1=new InnerHuman1();
InnerHuman2 innerHuman2=new InnerHuman2();
innerHuman2.move();
innerHuman1.die();
}
class InnerHuman1 extends Biology{
}
class InnerHuman2 extends Moveable{
}
}
测试类main如下
package com.pht.inner;
public class Humantest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Human human=new Human();
human.MoveableBiology();
}
}
可以看出,我们是通过内部类分别继承来实现多继承的功能,这对于在一些情况下提高代码的灵活性和复用是很有帮助的。当然,我们也可以外部类继承一个模块,剩下的由内部类来继承来实现。在此不需要赘述。
内部类的封装性:
加入我们把内部类定义为private的,那么就只有包含此内部类的外部类能够访问他。这样在我们希望只给某一个类提供服务,拒绝其它不相干的的类的访问的时候,我们可以通过内部类来达到目的。