黑马程序员技术交流社区
标题:
关于继承的困惑
[打印本页]
作者:
黄宽
时间:
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