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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄宽 中级黑马   /  2014-10-29 07:07  /  3624 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1黑马币
    在Java中类的单继承众所周知,它的存在是为了避免子类多继承父类,在方法调用时可能会发生父类中有同名方法,从而产生错误。但是JAVA语言也有多继承,那就是实现接口,但实现多个接口就没有可能有同名方法吗?由于接口中的方法是抽象方法,子类都必须复写再能实例化,假如子类同时实现的两个以上接口中存在重复的方法,那么我是覆写一次,还是复写两次,还是不允许这种情况出现呢,。假设我复写一次,我用实例调用复写肯定会出错吧,复写两次好像也不对,难道是不允许这种情况发生。但假如我刚好要用的两个接口里面的功能函数,怎么办呢。学得很烂,感觉不是很懂,求大神分析一下,谢谢!:)

最佳答案

查看完整内容

同学你好,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,接口的作用就是表示一种标准,一种操作的约定,所以来说,你如果实现了多个接口,而接口中又有重名的方法 (标准),只是表示,该类有了这种能力,而不是表示该类两次有了这种能力。 有个例子,可以参考,写的不是很恰当: interface A { public void print (); public void save (); } interface B { public void print (); public void give () ...

8 个回复

倒序浏览
同学你好,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface,接口的作用就是表示一种标准,一种操作的约定,所以来说,你如果实现了多个接口,而接口中又有重名的方法 (标准),只是表示,该类有了这种能力,而不是表示该类两次有了这种能力。
有个例子,可以参考,写的不是很恰当:
interface A
{
        public void print ();
        public void save ();
}
interface B
{
        public void print ();
        public void give ();
}
class C implements A ,B
{
        public void print()
        {
                System.out.println ("C,print ()");
        }
        public void print () // 出现错误了,重定义方法
        {
                System.out.println ("c,print (),again");
        }
        public void save ()
        {
                System.out.println ("save");
        }
        public void give ()
        {
                System.out.println ("give");
        }
}
public class Test
{
        public static void main (String args [] )
        {
                C c = new C ();
                c.print ();
                c.save ();
                c.give ();
        }
}
回复 使用道具 举报
方法重写一次就行了,,,重写多次应该会报错,,,当对象调用时会不知道调用哪个,,,重写在继承和接口中使用,,,方法重载在当前类中使用,,,,
回复 使用道具 举报
你好 ,就像你说的 java中不允许多继承但是允许多实现。不允许多继承是因为父类中可能存在重名函数,导致编译错误,但是为什么可以多实现呢?因为接口中的方法都是抽象方法,抽象方法是没有方法体的,如果2个以上的接口中存在重名,实现类(子类)只需要重写重名方法中的一个即可。
回复 使用道具 举报
原因很简单,  继承你明白 有声明 有实现..  而接口 他只有声明,,  没有实现  你想一下 有无数个声明根本不影响什么, 因为根本没有主体  也就是根本没有实现, 所以你只要写一个实现,   就这么说, 不管你调用哪个声明(因为完全都是一样的名字)  结果都会找到你实现的方法,  所以 你觉得会出错么... 对吧...  你想声明多少就声明多少, 最终我就实现一个,,  
回复 使用道具 举报
如果继承多个类 重写了方法那倒无所谓(假设多继承存在的情况) 但是多继承没重写的情况下 你调用了几个父类中都存在的方法 这时候编译器就没办法判断你是要执行哪个父类的中方法
而多实现的话 你必须实现所有接口方法 那么你调用的时候永远是调用自己的动能 所以不会出现逻辑上的错误
如果java在调用父类的时候可以指定父类 那么多继承就没问题 我只能理解到这 至于为什么java不这么做 存在的必然有它的道理 只是我们现在还不懂

点评

分析的不错啊,赞一个!  发表于 2014-11-1 08:27
回复 使用道具 举报
复写就可以了啊
回复 使用道具 举报
Mr.JUN 中级黑马 2014-11-20 00:34:37
8#
这种情况可能很久都碰不上
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马