内部类实现多继承(内部类的优势)及内部类实现一个接口与外围类实现这个接口的区别
在java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不能同时继承多个类。但有时候我们确实需要继承多个类,比如希望拥有两个类的行为功能,就很难使用单继承来解决问题了(当然多层继承是可以解决的),那么我们还可以用什么办法来解决多重继承的问题呢?没错!用内部类!下面介绍一个案例。假设有一个父亲和母亲,他们的儿子继承了他们两个的优点,那么怎么来写呢?
-
public interface Father {
//定义父亲的强壮指数的接口
public int strong();
}
-
public interface Mother {
//定义母亲的善良指数的接口
public int kind();
}
-
public class FatherImpl implements Father {
//实现父亲接口,定义父亲强壮指数为8
@Override
public int strong() {
return 8;
}
}
-
public class MotherImpl implements Mother {
//实现母亲接口,定义母亲善良指数为8
@Override
public int kind() {
return 8;
}
}
下面儿子类来了~~
儿子类
可以看到儿子继承父亲,并且覆写了父类的strong方法,同时呢儿子也具有母亲的优点,覆写了母亲的kind方法。这里构造了一个MotherSpecial类继承于母亲类,也就是获得了母亲类的行为方法,这也是内部类的一个重要特征:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才能成为可能~~
在现实生活中,也确实存在多重继承的问题,比如我国的“四不像”(学名麋鹿),其外形“似鹿非鹿,似马非马,似牛非牛,似驴非驴”,这要是用单继承就麻烦了,如果用多继承的话就可以很好的解决问题了,定义鹿、马、牛、驴四个类,再建立麋鹿类的多个内部类,继承他们即可~~~
在java中,外围类只能继承一个基类,要实现多继承,只有继承多个接口类型。有时,你需要与接口的实现进行交互,所以使用内部类最重要的一个原因是:每个内部类都能独立的继承自一个(接口的)实现,内部类允许你继承多个非接口类型。正是因为内部类的这种能力,有效的实现了“多重继承”。
内部类的其他特性:
1.内部类可以有多个实例,每个实例都有自己的状态信息,并且与其外围类对象的信息相互独立;
2.在单个外围类中,你可以让多个内部类以不同的方式实现一个接口,或继承同以一个类;
3.创建内部类对象的时候并不依赖外围类对象的创建;
4.内部类与外围类之间没有另人迷惑的“is-a”关系,它就是一个独立的实体