黑马程序员技术交流社区

标题: 在看内部类的时候,发现这样一句话! [打印本页]

作者: 罗凯健    时间: 2013-9-25 17:13
标题: 在看内部类的时候,发现这样一句话!
本帖最后由 杨增坤 于 2013-9-25 20:07 编辑

注意:当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。

于是我写了几个代码试一下:
  1. package com.itheima;

  2. public class ClassA {
  3.         public void printA(){
  4.                 System.out.println("I'm A");
  5.         }
  6. }
复制代码
  1. package com.itheima;

  2. public interface InterfaceB {
  3.         public void printA();
  4. }
复制代码
  1. package com.itheima;

  2. public class ClassC extends ClassA implements InterfaceB{
  3.         public void printA(){
  4.                 System.out.println("I'm C!");
  5.         }
  6. }
复制代码
  1. package com.itheima;

  2. public class main {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 ClassC c=new ClassC();
  9.                 c.printA();
  10.         }

  11. }
复制代码
很简单的类,我是直接在ClassC上面实现接口方法的,调用的时候也能正确调用!那么这句话是对的还是错的?!还是说我的理解有误?!
作者: 暮雨    时间: 2013-9-25 17:24
类与接口(或者是接口与接口)发生方法命名冲突,你的这几个类和接口命名没有冲突,只是方法名一样罢了,不存在冲突的问题,类实现接口就必须实现接口所定义的方法,你这里很显然实现了方法的定义。类继承其他的类,你这里实现了方法的覆盖,也是正确的,并不存在冲突的问题,我想你是把类,接口。方法这几个定义搞混了,希望可以帮到你。
作者: 罗凯健    时间: 2013-9-25 17:26
暮雨 发表于 2013-9-25 17:24
类与接口(或者是接口与接口)发生方法命名冲突,你的这几个类和接口命名没有冲突,只是方法名一样罢了,不存 ...

求个例子。。这样说不是太明白。。谢谢{:soso_e154:}

作者: 早知道    时间: 2013-9-25 17:29
本帖最后由 早知道 于 2013-9-25 17:32 编辑

根据这句话的意思,应该是接口实现的方法和类实现的方法是是不同的功能实现,但你现在只是实现了一个功能而已。如果你不用实现两个功能,显然是没有什么问题的。
作者: HM代景康    时间: 2013-9-25 19:32
内部类可以实现接口,当类与接口或者接口与接口发生方法命名冲突的时候,还必须用内部类来实现接口。实现Runnable这个接口与继承Thread这个父类这是Java中实现线程的两种方式。因为Java的单继承的体系结构,也就说你编写的类只能有一个父类,所以有的时候不能把Thread作为父类,那么就可以实现Runnable接口,来实现多线程。而且Thread类本身也是实现了Runnable接口。
是定义在另一个类中的类。

也可以在接口中定义,内部类可以继承某类或实现某接口;

内部类是一种编译时的语法,编译后生成的两个类是独立的两个类。内部类配合接口使用,来强制做到弱耦合(局部内部类,或私有成员内部类)。

用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。


作者: 罗凯健    时间: 2013-9-25 20:08
djkyqkzj 发表于 2013-9-25 19:32
内部类可以实现接口,当类与接口或者接口与接口发生方法命名冲突的时候,还必须用内部类来实现接口。实现Ru ...

这样说我有点明白,假如有例子就更明白了
作者: HM代景康    时间: 2013-9-25 21:08
罗凯健 发表于 2013-9-25 20:08
这样说我有点明白,假如有例子就更明白了

好的   下次有了





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