现在我有两个接口和两个类,他们之间的关系是这样的。
public interface A
{
   int m();
   int n();
   String k();
}public interface B extends A
{
   int g();
}public class C implements A
{
   int m(){}
   int n(){}
   String k(){}   
}public class D implements B
{
   .......(这里该写点什么?)
   int g(){}
}
(像我上面写的D类肯定是不对的)
接口B继承接口A,
类C实现接口A,
类D实现接口B。
我怎样在类D中利用类C(因为类C中实现了接口B中来自父接口的方法),只实现接口B中新定义的方法g()就可以了,而不需要去实现B的父接口中的方法,也就是上面代码类D中那样写。

解决方案 »

  1.   

    public class D implements B exdents C看看行不行,不过我觉得挺不舒服.或,public class D impolements B{  private C c = new C();  int m(){ return c.m; }
      ...
    }
      

  2.   

    public class D implements B extends C
    {
    int g(){............}
    }
    这样可以的。
      

  3.   

    2楼用的感觉非常奇怪呢!但是不知道可以不可以,估计可以!
    另外
    即使是这样
    public class D impolements B{   private C c = new C();   int m(){ return c.m; } 
      ... 
    }
    也不可以!
    c是成员
    不可能说c中的方法成为了d的方法!
      

  4.   

    D也必须要实现C的方法的。
    public class D
        implements B {
      public int g() {return 0;}
      public int m() {return 0;}
      public int n() {return 0;}
      public String k() {return "";}
    }
      

  5.   

    但我在网上看了有篇文章说
    public class D impolements B{    private C c = new C();    int m(){ return c.m; }  
      ...  

    这个方法可行,可我自己试又不行,不知道怎么回事!
      

  6.   

    int m(){}
    int n(){}
    int g(){}
    String k(){}    
    public interface B extends A 这样也行?
      

  7.   

    我这样行不行?
    把D类声明成静态的,也就是这样
    public abstract class D impolements B
    {
      private C c = new C();
      int m(){ return 1 }
    }
    不知道这样做对其他类创建D类对象和调用D类中的方法有没有什么影响
      

  8.   

    public class D impolements B{    private C c = new C();    int m(){ return c.m; }  
      ...  

    也不可以! 
    c是成员 
    不可能说c中的方法成为了d的方法!
    =========================================
    这只是一种pattern,是一种可行的解决方法。  不过这不是继承。
      

  9.   

    public class D extends C implements B 

        int g(){............} 

      

  10.   

    public class D extends C implements B  
    {  
        int g(){............}  
    }  这样可以,把继承写前面,接口写后面。楼上说的对
      

  11.   

    因为类C中实现了接口B中来自父接口的方法?说错了还是写错了,C是实现了A呀
      

  12.   

    在我回答问题之前,我对楼主的学习态度表示愤怒!你的程序根本就没有通过你自己的调试,只是头脑中产生这个问题然后就来这里发问。。并没有自己思考,我是新人,如果我是JAVA老人的话,这问题我不会回答。,因为老手一眼就可以看出来程你有没有去思考。在我调试程序的时候发现你的程序有N多问题。
    下面是我修改后的程序如果你去思考,并且看了接口的相关知识,应该能够理解我的意思。interface A //定义接口A

    void m();
    void n();
    void k();
    } interface B extends A //定义接口B继承接口A

    void g();
    } class C implements A //定义类C实现接口A
    {
    public void m()
    {
    System.out.println("M我被调用了!");
    }

    public void n()
    {
    System.out.println("N我被调用了!");
    }
    public void k()
    {
    System.out.println("K我被调用了!");

    } public class D extends C implements B //定义类D继承自类C并且实现接口B
    {  
    public void g()
    {
    System.out.println("G我被调用了!");
    } public static void main(String [] args)
    {
    D d = new D();//产生对象d 调用类D所实现的方法
    d.m();
    d.n();
    d.k();
    d.g();
    }
      

  13.   

    首先感谢你们指出我的错误,那段代码只是我零时抽出来的一个模型,源程序很复杂,也只是想把问题描述清楚一点,所以没有考虑那么多。
    17楼的我知道那样可以实现。发这个帖子是源于看了网上一篇帖子,说只要在D类中创建了C类的对象就可以只实现接口B中新创建的方法,而不用去管A类的。但我试过不行,我想搞清楚是那篇帖子搞错了,还是我的哪些地方搞错了,所以就提了这个问题。
    就是这篇文章
    http://www.wingwit.com/Article/WLBC/JSP/200612/30927_2.html
      

  14.   

    所谓D中创建C实例, 并不是说D就不再要实现A的方法了.
    同样D必须实现A的方法, 但是方法体里面是调用C的方法进行操作.
    例如
    public class D implements B {
      private C c = new C();
      public void m() {
        c.m();
      }
    }这个实际上是代理模式, C实际上是D的代理. m()是C在做事情, 而不是D. 但是从类的外观来看m()是D在做事情.