A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

刘毅ly

中级黑马

  • 黑马币:11

  • 帖子:81

  • 精华:0

© 刘毅ly 中级黑马   /  2016-9-26 00:25  /  8276 人查看  /  28 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

5黑马币
继承是否是单继承,用什么方式可以替换多继承??

最佳答案

查看完整内容

看来这5分是我的囊中之物了 首先Java只支持单继承,支持多层继承.但是如果我们要实现多继承怎么办呢?Java提供了内部类可以曲折的解决此问题. 我们来看一个案例,定义一个父亲、母亲接口,描述父亲强壮、母亲温柔的理想情形,代码如下: 其中strong和kind的返回值表示强壮和温柔的指数, ...

28 个回复

倒序浏览
看来这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)来覆写父类的方法,以完成继承父亲行为的功能。  多重继承指的是一个类可以同时从多与一个的父亲那里继承行为与特征,按照这个定义,我们的儿子类、女儿类都实现了从父亲和母亲那里继承所有的功能,应该属于多重继承,这完全归功于内部类,大家在需要用到多重继承的时候,可以思考一下内部类。
   在现实生活中,也确实存在多重继承的问题,上面的例子说后人继承了父亲也继承了母亲的行为和特征,再比如我国的特产动物"四不像"(学名麋鹿),其外 形" 似鹿非鹿,似马非马,似牛非牛,似驴非驴 ",这你想要用单继承实现就比较麻烦了,如果用多继承则可以很好地解决此问题:定义鹿、马、牛、驴 四个类,然后建立麋鹿类的多个内部类,继承他们即可。   



点评

看起来好屌的样子!  发表于 2016-9-27 17:31
回复 使用道具 举报
应该是通过子父类的多层继承来实现多继承吧
回复 使用道具 举报
这个是一本书上的建议 具体请看http://www.cnblogs.com/selene/p/5865810.html
回复 使用道具 举报
用接口吧?   还有可以就是多层继承!
回复 使用道具 举报
是单继承,但支持多层继承,可以用实现接口的方式来尽量替代多继承.
回复 使用道具 举报
用接口啊
回复 使用道具 举报
运用接口啊,java的接口就是弥补java单继承的不足的,一个类可以实现多个接口的。
回复 使用道具 举报
在c和oc中继承都是单继承,在别的语言中有的是多继承。这是根据语言的编译器中规定来决定的
回复 使用道具 举报
iOS中类的继承只能是单继承,也就是只能有一个父类;没有多继承,但可以通过协议来实现类似的“多继承”效果,即你声明遵守我的协议,那么就可以使用我的属性和方法
回复 使用道具 举报
刚学,接口是可以多继承的
回复 使用道具 举报
hugin 中级黑马 2016-9-29 13:10:59
12#
Java只支持单继承,用多实现可以替换多继承
回复 使用道具 举报
类与类是单继承,可以多继承;
接口与接口是多继承;
类与接口是实现,可以多实现,
回复 使用道具 举报
类只能单继承,接口可以多实现
回复 使用道具 举报
单继承 接口实现多继承
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
barny 中级黑马 2016-10-1 17:13:36
16#
你可以用多层继承,或者用接口方式解决.
回复 使用道具 举报
继承是只能继承一个,单继承,只能有一个父亲,但是可以实现多个接口,可以用接口
回复 使用道具 举报
继承分为两种情况来分:
   1 接口之间的继承,接口之间的继承可以是多继承也可以是单继承
   2 类与类之间的继承,只能是单继承,但是可以多层次继承
想要替换多继承,可以使用实现接口的方法
回复 使用道具 举报
类继承只有单继承(extends) , 接口可以多实现(implements)
回复 使用道具 举报
类在Java中是单继承,可以多层继承,接口可以多继承.但是在别的语言中类是可以多继承的,想实现多继承,可以通过多层继承,定义父类,让父类再去继承父类,谢谢
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马