看来这5分是我的囊中之物了
首先Java只支持单继承,支持多层继承.但是如果我们要实现多继承怎么办呢?Java提供了内部类可以曲折的解决此问题.
我们来看一个案例,定义一个父亲、母亲接口,描述父亲强壮、母亲温柔的理想情形,代码如下:
[Java] 纯文本查看 复制代码 public interface Father {
public int strong();
}
interface Mother {
public int kind();
}
其中strong和kind的返回值表示强壮和温柔的指数,指数越高强壮和温柔也就越高,这与游戏中设置人物的属性是一样的,我们继续开看父亲、母亲这两个实现:
[Java] 纯文本查看 复制代码 class FatherImpl implements Father {
// 父亲的强壮指数为8
@Override
public int strong() {
return 8;
}
}
class MotherImpl implements Mother {
// 母亲的温柔指数为8
@Override
public int kind() {
return 8;
}
}
父亲的强壮指数为8,母亲的温柔指数也为8,门当户对,那他们生的儿子和女儿一定更优秀了,我们看看儿子类,代码如下:
[Java] 纯文本查看 复制代码 class Son extends FatherImpl implements Mother {
@Override
public int strong() {
// 儿子比父亲强壮
return super.strong() + 1;
}
@Override
public int kind() {
return new MotherSpecial().kind();
}
private class MotherSpecial extends MotherImpl {
@Override
public int kind() {
// 儿子的温柔指数降低了
return super.kind() - 1;
}
}
}
儿子继承自父亲,变得比父亲更强壮了(覆写父类strong方法),同时儿子也具有母亲的优点,只是 温柔指数降低了。注意看,这里构造了MotherSpecial类继承母亲类,也就是获得了母亲类的行为和方法,这也是内部类的一个重要特性:内部类可以 继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能。MotherSpecial的这种内部类叫做成员内部类(也叫 作实例内部类,Instance Inner Class),我们再来看看女儿类,代码如下:
[Java] 纯文本查看 复制代码 class Daughter extends MotherImpl implements Father {
@Override
public int strong() {
return new FatherImpl() {
@Override
public int strong() {
//女儿的强壮指数降低了
return super.strong() - 2;
}
}.strong();
}
}
女儿继承了目前的温柔指数,同时又覆写了父亲的强壮指数,不多解释。注意看覆写的strong方法,这里是创建了一个匿名内部类(Anonymous Inner Class)来覆写父类的方法,以完成继承父亲行为的功能。 多重继承指的是一个类可以同时从多与一个的父亲那里继承行为与特征,按照这个定义,我们的儿子类、女儿类都实现了从父亲和母亲那里继承所有的功能,应该属于多重继承,这完全归功于内部类,大家在需要用到多重继承的时候,可以思考一下内部类。
在现实生活中,也确实存在多重继承的问题,上面的例子说后人继承了父亲也继承了母亲的行为和特征,再比如我国的特产动物"四不像"(学名麋鹿),其外 形" 似鹿非鹿,似马非马,似牛非牛,似驴非驴 ",这你想要用单继承实现就比较麻烦了,如果用多继承则可以很好地解决此问题:定义鹿、马、牛、驴 四个类,然后建立麋鹿类的多个内部类,继承他们即可。
|