黑马程序员技术交流社区

标题: java多实现带来的安全隐患 [打印本页]

作者: 逸盏清茶    时间: 2013-5-15 00:00
标题: java多实现带来的安全隐患
本帖最后由 逸盏清茶 于 2013-5-16 17:37 编辑

多继承容易带来安全隐患:当多个父类中定义了相同功能,功能内容不同时,子类对象不确定要运行哪一个
        如果子类实现了多个接口,并且多个接口中定义了相同的功能,功能内容不同时,不也会出现安全隐患吗?
作者: 乎¤_¤乎    时间: 2013-5-15 00:10
既然是接口,那么都是抽象函数,没有功能内容,这时候子类只要实现其中的一个就可以了。
送你一道题
作者: HM刘博    时间: 2013-5-15 00:19
这个是不会的,因为接口中的方法都是抽象的,都没有方法体,只是方法声明相同。
例子:
  1. interface Inter//定义一个接口
  2. {
  3.         public abstract void show();//方法是抽象的
  4. }

  5. interface Inter2//定义第二个接口,两个方法都是抽象的
  6. {
  7.         public abstract void method();
  8.         public abstract void show();
  9. }

  10. interface Inter3 extends Inter,Inter2//第三个接口继承了前两个接口
  11. {
  12.         public abstract void function();
  13. }

  14. class Fu //默认有个extends Object
  15. {
  16. }

  17. class Demo extends Fu implements Inter,Inter2//继承Fu类并实现了前两个接口
  18. {
  19.         public void show()//复写show方法
  20.         {
  21.                 System.out.println("demo show");
  22.         }

  23.        
  24.         public void method()//复写method方法
  25.         {
  26.                 System.out.println("demo method");
  27.         }
  28.        
  29. }
复制代码

作者: 逸盏清茶    时间: 2013-5-15 00:24
对啊,那多实现不是也出现了安全隐患。
作者: 逸盏清茶    时间: 2013-5-15 00:30
  1. interface A
  2. {
  3.         void show();
  4. }

  5. interface B
  6. {
  7.         int show ();

  8. }

  9. class C implements A,implements B
  10. {
  11.         public void show(){};
  12.         public int show (){};
  13. }


  14. C 对象在调用show()的时候会运行哪一个呢?
复制代码

作者: xuemeng    时间: 2013-5-15 00:38
本帖最后由 xuemeng 于 2013-5-15 00:40 编辑
逸盏清茶 发表于 2013-5-15 00:30


你这就是一种错误的写法啊!!1  代码不能这样写的!!! 在我们使用接口的时候, 我们就要避免这种情况出现啊!!!  这个与接口可以多实现并不矛盾
作者: 杨修    时间: 2013-5-15 11:41
楼主,我曾经也和你有过相同的矛盾,有时候有些矛盾不是坏事,在你慢慢学习过程中,之前的一些问题都会慢慢的会被解决。
第一,Java不支持多继承,只支持单继承;
          你上面说的继承(只有单继承)中如果出现多个相同的功能(如果这里不严格规定参数列表是否相同),但是功能内容不同,这时候,返回值一般类型是不同的,
       还有就是后面的参数列表也是用来确定使用哪一个方法的依据。
第二,Java支持多实现,这在一定程度上弥补了java不支持多继承这一特性;
          多实现中不管实现接口有多少个,统统都支持。每个接口里面的函数可以相同也可以不相同,
如果多个接口里面都出现了相同的函数,那么实现这一个函数的时候,就只要复写一个函数就行了。
interface A
{
        void show();
       int method();
}
interface B
{
       void  show ();
}
class C implements A,implements B
{
        void show(){};
        int method(){};
}
上面代码中,只实现了一个void show(){};方法。



作者: 王靖远    时间: 2013-5-15 15:06
因为接口中的方法都是抽象的。抽象的在实现时候必须要复写,复写后只有一种方法能保留。那么就不会出现安全隐患啦。




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