日期:2014-05-20  浏览次数:20992 次

接口和他的实现类
现在我有两个接口和两个类,他们之间的关系是这样的。
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中那样写。


------解决方案--------------------
public class D implements B exdents C

看看行不行,不过我觉得挺不舒服.

或,

public class D impolements B{

private C c = new C();

int m(){ return c.m; }
...
}
------解决方案--------------------
public class D implements B extends C
{
int g(){............}
}
这样可以的。
------解决方案--------------------
2楼用的感觉非常奇怪呢!但是不知道可以不可以,估计可以!
另外
即使是这样
public class D impolements B{ 

private C c = new C(); 

int m(){ return c.m; } 
... 
}
也不可以!
c是成员
不可能说c中的方法成为了d的方法!
------解决方案--------------------
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 "";}
}

------解决方案--------------------
我上面说错了 应该说是A
------解决方案--------------------
int m(){}
int n(){}
int g(){}
String k(){}


public interface B extends A 这样也行?

------解决方案--------------------
在我回答问题之前,我对楼主的学习态度表示愤怒!你的程序根本就没有通过你自己的调试,只是头脑中产生这个问题然后就来这里发问。。并没有自己思考,我是新人,如果我是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();
}
}
------解决方案--------------------
17楼的实现方法是对的,开头的话我也认同。写程序最好能自己努力去调试实现,楼主所问的只是概念性的问题,应该自己查阅一下资料就可以解决的。
------解决方案--------------------
所谓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在做事情.