java中的接口为什么可以多继承,而其他类则不能实现多继承
展开全部
java语言就是这样规定的,接口可以多继承,接口也是类,其实相当于类也可以多继承,这也是java避免了这个缺点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
子类通过方法名称实现对父类方法的继承或者覆写,这句话相信学过java的人都明白的吧?
另外,java规范里面,方法名称和参数(类型与数量)唯一确定一个方法;
好了,说完了前提,现在可以举个例子了,现在有两个父类,其中有相同的方法fun(),子类如果能够多继承,那必定是通过方法名称继承两个fun()方法,此时还不会有什么问题;但在子类对象生成以后调用fun()时,JVM该怎么判断子类想要调用那个fun()?
所以类不能进行多继承,为的是规避如上(包括不限于)的逻辑问题,为了彻底避免该类问题,所以直接在语法上规定了不能多继承;所以语法规定不是原因,而是为了规避逻辑问题。
而对于接口跟接口之间,接口跟父类之间,其实也存在类似于类的同名方法问题,但因为接口方法只是抽象方法,其自由度大,所以可以通过多种方法去解决这个逻辑问题:比如通过内部类区分,通过super关键字(针对接口与父类中存在同名方法的问题)重写方法等等。。。
另外,java规范里面,方法名称和参数(类型与数量)唯一确定一个方法;
好了,说完了前提,现在可以举个例子了,现在有两个父类,其中有相同的方法fun(),子类如果能够多继承,那必定是通过方法名称继承两个fun()方法,此时还不会有什么问题;但在子类对象生成以后调用fun()时,JVM该怎么判断子类想要调用那个fun()?
所以类不能进行多继承,为的是规避如上(包括不限于)的逻辑问题,为了彻底避免该类问题,所以直接在语法上规定了不能多继承;所以语法规定不是原因,而是为了规避逻辑问题。
而对于接口跟接口之间,接口跟父类之间,其实也存在类似于类的同名方法问题,但因为接口方法只是抽象方法,其自由度大,所以可以通过多种方法去解决这个逻辑问题:比如通过内部类区分,通过super关键字(针对接口与父类中存在同名方法的问题)重写方法等等。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询