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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蔡聪 注册黑马   /  2012-6-4 20:15  /  3056 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么c++使用多继承但没有接口一说,java为什么只支持单继承,并且使用接口?

11 个回复

倒序浏览
哥们这个问题可以先百度一下,在查看相关帖子,一定会有收获的
以后遇到什么问题先百度,在上论坛找相关帖子,不行在发帖交流
这样可能有助于培养学习的积极性
加油

点评

建议很棒  发表于 2012-6-4 23:37
回复 使用道具 举报
1. java中不能实现多继承,但是可以实现多个接口,接口弥补了不能多继承的缺陷。
2,很多人都认为使不使用接口都一样的,而且使用接口,还多了些代码,费事,其实不然。在多个类实现一个接口的时候,我们可以使用接口回调,只需要用接口名字申明一个变量,然后用这个变量就可以分别用关键字 new 不同的类后,就能直接用 这个变量去调用,不同类中的方法了。
3. 在多人,完成一个项目时候,可以便于模板话。在使用类实现接口的时候,不用关心,接口到底实现了什么方法,只管用就行了。而实现接口方法的部分由另外的人员去实现,就ok了。
4. 面向接口编程(往往会使用工厂模式),可以很好的降低模块之间的偶合度。

楼主可以参考一下《研磨设计模式》一书

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
为什么c++使用多继承但没有接口一说,java为什么只支持单继承

请参阅《Java编程思想》第4版 第一章 第8节 单根继承结构
回复 使用道具 举报
java中没有多继承 通过接口实现这个 多继成。
回复 使用道具 举报
另外在java中接口一般是抽象的 提取都是一些方法,这样便于程序的优化 以及复用。
回复 使用道具 举报
根据自己以前偶尔看到的知识,貌似是这样的
java的出现很大程度是为了让编程不再那么复杂,所以去掉了前面那些语言中较繁琐的编程方法,比如c++的指针,多重继承,但是过了不久,又发现少不了c++的多重继承功能,就出现了接口,用implements关键字可以实现多个接口,这样就替代了c++的多重继承;
回复 使用道具 举报
我的总结:
一个类只能继承一个其他的类
    在Java语言中禁止多重继承:一个类可以具有多个直接父类。多重继承不合法的原因是容易引发意义不明确。例如,有一个类C,如果允许它同时继承A类与B类(class C    extends A,B{}),假如A、B两个类都有同一种方法fun(),如果定义:C c = new C();那么c.fun()应该调用哪一个父类的fun()方法?无法给出答案,因此Java语言禁止多重继承。 但C++却是可以的,所以C++比起java在语法上却难了些。
     但一个类可以实现多个接口 :
     这一特性和上一特性结合使用,可以获得和多重继承相似的效果。
现假如类C实现了A与B两个接口(class c implements A,c{}),且这两个接口都有一个抽象fun()方法,现在调用方法时没有任务不明确的地方,因为接口中的所有方法都是抽象,并且超类的任何方法都需在子类中地覆盖实现,所以调用时其实是调用自己本身的实现方法,没有什么调用不明确的说法。

回复 使用道具 举报
张文建 发表于 2012-6-4 20:20
哥们这个问题可以先百度一下,在查看相关帖子,一定会有收获的
以后遇到什么问题先百度,在上论坛找相关帖 ...

哥们听你的意思感觉这个对你来说都是小儿科是吧?!那你给我讲下这两种语言的编程思想,还有c++使用的多继承在哪方面应用较java有优势?而java引入接口优势又在哪里?建议你先百度下再回答
回复 使用道具 举报
蔡聪 发表于 2012-6-5 10:28
哥们听你的意思感觉这个对你来说都是小儿科是吧?!那你给我讲下这两种语言的编程思想,还有c++使用的多 ...

完全接受建议,正在学习中
回复 使用道具 举报
java只支持单继承,扩展了接口之后,弥补了缺陷,并且提高了程序的可扩展性,两全其美
比如 :
interface Study
{
        public void study();
}
class Person
{
        private String name;
        private int age;
        public void sleep()
        {
                System.out.println("Person is sleeping");
        }
}

class Student extends Person implements Study  
{
        //学生这个类不仅继承人这个类,而且实现了学习的接口。       
}

class Monkey implements Study
{
        //动物猴子也可以实现学习的接口。提高了程序的扩展性       
}

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
java只支持单继承,扩展了接口之后,弥补了缺陷,并且提高了程序的可扩展性,两全其美
比如 :
interface Study
{
        public void study();
}
class Person
{
        private String name;
        private int age;
        public void sleep()
        {
                System.out.println("Person is sleeping");
        }
}

class Student extends Person implements Study  
{
        //学生这个类不仅继承人这个类,而且实现了学习的接口。       
}

class Monkey implements Study
{
        //动物猴子也可以实现学习的接口。提高了程序的扩展性       
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马