昆明java培训
达内昆明广州春城路

18487146383

热门课程

让多重继承成为现实

  • 时间:2016-09-30
  • 发布:昆明Java培训
  • 来源:达内新闻

昆明Java培训机构的老师知道,在Java中一个类可以多重实现,但不能多重继承,也就是说一个类能够同时实现多个接口,但不能同时继承多个类。但有时候我们确实需要继承多个类,比如希望拥有多个类的行为功能,就很难使用单继承来解决问题了(当然,使用多继承是可以解决的)。幸运的是Java中提供的内部类可以曲折的解决此问题,我们来看一个案例,定义一个父亲、母亲接口,描述父亲强壮、母亲温柔的理想情形,代码如下:

public interface Father {

public int strong();

}

interface Mother {

public int kind();

}

其中strong和kind的返回值表示强壮和温柔的指数,指数越高强壮和温柔也就越高,这与游戏中设置人物的属性是一样的,我们继续开看父亲、母亲这两个实现:

class FatherImpl implements Father {

//父亲的强壮指数为8

@Override

public int strong() {

return 8;

}

}

class MotherImpl implements Mother {

//母亲的温柔指数为8

@Override

public int kind() {

return 8;

}

}

父亲的强壮指数为8,母亲的温柔指数也为8,门当户对,那他们生的儿子和女儿一定更优秀了,我们看看儿子类,代码如下:

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),我们再来看看女儿类,代码如下:

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)来覆写父类的方法,以完成继承父亲行为的功能。

多重继承指的是一个类可以同时从多与一个的父亲那里继承行为与特征,按照这个定义,我们的儿子类、女儿类都实现了从父亲和母亲那里继承所有的功能,应该属于多重继承,这完全归功于内部类,大家在需要用到多重继承的时候,可以思考一下内部类。

在现实生活中,也确实存在多重继承的问题,上面的例子说后人继承了父亲也继承了母亲的行为和特征,再比如我国的特产动物"四不像"(学名麋鹿),其外形"似鹿非鹿,似马非马,似牛非牛,似驴非驴",这你想要用单继承实现就比较麻烦了,如果用多继承则可以很好地解决此问题:定义鹿、马、牛、驴 四个类,然后建立麋鹿类的多个内部类,继承他们即可。

了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!

上一篇:java培训:匿名类的构造函数很特殊
下一篇:让工具类不可实例化

昆明java培训机构:你不知道java的小细节

昆明Java培训机构《Java编程中需注意的几大问题》

昆明java培训机构:java未来的发展走向

昆明java培训机构:java学完可以干什么!

选择城市和中心
贵州省

广西省

海南省

扫一扫

了解更多干货