黑马程序员技术交流社区

标题: 关于继承的困惑 [打印本页]

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


作者: courage    时间: 2014-10-29 07:07
同学你好,一个类只能使用一次继承关系。但是,一个类却可以实现多个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 ();
        }
}
作者: 阿奔    时间: 2014-10-29 21:32
方法重写一次就行了,,,重写多次应该会报错,,,当对象调用时会不知道调用哪个,,,重写在继承和接口中使用,,,方法重载在当前类中使用,,,,
作者: 张泰    时间: 2014-10-30 20:47
你好 ,就像你说的 java中不允许多继承但是允许多实现。不允许多继承是因为父类中可能存在重名函数,导致编译错误,但是为什么可以多实现呢?因为接口中的方法都是抽象方法,抽象方法是没有方法体的,如果2个以上的接口中存在重名,实现类(子类)只需要重写重名方法中的一个即可。
作者: doudou33420    时间: 2014-10-30 21:48
原因很简单,  继承你明白 有声明 有实现..  而接口 他只有声明,,  没有实现  你想一下 有无数个声明根本不影响什么, 因为根本没有主体  也就是根本没有实现, 所以你只要写一个实现,   就这么说, 不管你调用哪个声明(因为完全都是一样的名字)  结果都会找到你实现的方法,  所以 你觉得会出错么... 对吧...  你想声明多少就声明多少, 最终我就实现一个,,  
作者: 郑飞    时间: 2014-11-1 06:37
如果继承多个类 重写了方法那倒无所谓(假设多继承存在的情况) 但是多继承没重写的情况下 你调用了几个父类中都存在的方法 这时候编译器就没办法判断你是要执行哪个父类的中方法
而多实现的话 你必须实现所有接口方法 那么你调用的时候永远是调用自己的动能 所以不会出现逻辑上的错误
如果java在调用父类的时候可以指定父类 那么多继承就没问题 我只能理解到这 至于为什么java不这么做 存在的必然有它的道理 只是我们现在还不懂
作者: 想成为黑马    时间: 2014-11-3 17:17
复写就可以了啊
作者: Mr.JUN    时间: 2014-11-20 00:34
这种情况可能很久都碰不上




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2