1700441732
1700441733
private class MotherSpecial extends MotherImpl{
1700441734
1700441735
public int kind(){
1700441736
1700441737
//儿子温柔指数降低了
1700441738
1700441739
return super.kind()-1;
1700441740
1700441741
}
1700441742
1700441743
}
1700441744
1700441745
}
1700441746
1700441747
儿子继承自父亲,变得比父亲更强壮了(覆写父类strong方法),同时儿子也具有母亲的优点,只是温柔指数降低了。注意看,这里构造了MotherSpecial类继承母亲类,也就是获得了母亲类的行为方法,这也是内部类的一个重要特性:内部类可以继承一个与外部类无关的类,保证了内部类的独立性,正是基于这一点,多重继承才会成为可能。MotherSpecial的这种内部类叫做成员内部类(也叫做实例内部类,Instance Inner Class)。我们再来看看女儿类,代码如下:
1700441748
1700441749
class Daughter extends MotherImpl implements Father{
1700441750
1700441751
@Override
1700441752
1700441753
public int strong(){
1700441754
1700441755
return new FatherImpl(){
1700441756
1700441757
@Override
1700441758
1700441759
public int strong(){
1700441760
1700441761
//女儿的强壮指数降低了
1700441762
1700441763
return super.strong()-2;
1700441764
1700441765
}
1700441766
1700441767
}.strong();
1700441768
1700441769
}
1700441770
1700441771
}
1700441772
1700441773
女儿继承了母亲的温柔指数,同时又覆写父类的强壮指数,不多解释。注意看覆写的strong方法,这里是创建了一个匿名内部类(Anonymous Inner Class)来覆写父类的方法,以完成继承父亲行为的功能。
1700441774
1700441775
多重继承指的是一个类可以同时从多于一个的父类那里继承行为与特征,按照这个定义来看,我们的儿子类、女儿类都实现了从父亲类、母亲类那里所继承的功能,应该属于多重继承。这要完全归功于内部类,诸位在需要用到多重继承时,可以思考一下内部类。
1700441776
1700441777
在现实生活中,也确实存在多重继承的问题,上面的例子是说后人即继承了父亲也继承了母亲的行为和特征,再比如我国的特产动物“四不像”(学名麋鹿),其外形“似鹿非鹿,似马非马,似牛非牛,似驴非驴”,这你要是想用单继承表示就麻烦了,如果用多继承则可以很好地解决问题:定义鹿、马、牛、驴四个类,然后建立麋鹿类的多个内部类,继承它们即可。
1700441778
1700441779
1700441780
1700441781
[
上一页 ]
[ :1.700441732e+09 ]
[
下一页 ]