接口和他的实现类

caiitly 2007-10-09 04:03:41
现在我有两个接口和两个类,他们之间的关系是这样的。
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中那样写。
...全文
244 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
bradwoo8621 2007-10-15
  • 打赏
  • 举报
回复
所谓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在做事情.
flyfish10000 2007-10-14
  • 打赏
  • 举报
回复
17楼的实现方法是对的,开头的话我也认同。写程序最好能自己努力去调试实现,楼主所问的只是概念性的问题,应该自己查阅一下资料就可以解决的。
caiitly 2007-10-14
  • 打赏
  • 举报
回复
首先感谢你们指出我的错误,那段代码只是我零时抽出来的一个模型,源程序很复杂,也只是想把问题描述清楚一点,所以没有考虑那么多。
17楼的我知道那样可以实现。发这个帖子是源于看了网上一篇帖子,说只要在D类中创建了C类的对象就可以只实现接口B中新创建的方法,而不用去管A类的。但我试过不行,我想搞清楚是那篇帖子搞错了,还是我的哪些地方搞错了,所以就提了这个问题。
就是这篇文章
http://www.wingwit.com/Article/WLBC/JSP/200612/30927_2.html
langzi606 2007-10-13
  • 打赏
  • 举报
回复
这是为了方便理解才把四个类放在一起,一般四个类是不会在同一个文件中的。并且访问权限也不是默认的。
langzi606 2007-10-13
  • 打赏
  • 举报
回复
在我回答问题之前,我对楼主的学习态度表示愤怒!你的程序根本就没有通过你自己的调试,只是头脑中产生这个问题然后就来这里发问。。并没有自己思考,我是新人,如果我是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();
}
}
javahelper 2007-10-13
  • 打赏
  • 举报
回复
没有C什么事呀,看不懂。
javahelper 2007-10-13
  • 打赏
  • 举报
回复
因为类C中实现了接口B中来自父接口的方法?

说错了还是写错了,C是实现了A呀
Norris_Zhang 2007-10-13
  • 打赏
  • 举报
回复
public class D extends C implements B
{
int g(){............}
}

这样可以,把继承写前面,接口写后面。楼上说的对
yilinhust 2007-10-13
  • 打赏
  • 举报
回复
public class D extends C implements B
{
int g(){............}
}
caiitly 2007-10-13
  • 打赏
  • 举报
回复
结贴,
shouhu13 2007-10-10
  • 打赏
  • 举报
回复
我想,楼主可以自己写着试一试,为类写一些具体的方法,而不只是一个模型,看实际的运行效果如何!
cl55 2007-10-10
  • 打赏
  • 举报
回复
public class D impolements B{

private C c = new C();

int m(){ return c.m; }
...
}
也不可以!
c是成员
不可能说c中的方法成为了d的方法!
=========================================
这只是一种pattern,是一种可行的解决方法。 不过这不是继承。
caiitly 2007-10-10
  • 打赏
  • 举报
回复
我这样行不行?
把D类声明成静态的,也就是这样
public abstract class D impolements B
{
private C c = new C();
int m(){ return 1 }
}
不知道这样做对其他类创建D类对象和调用D类中的方法有没有什么影响
wunan320 2007-10-09
  • 打赏
  • 举报
回复
我上面说错了 应该说是A
wunan320 2007-10-09
  • 打赏
  • 举报
回复
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 "";}
}
karlpan01 2007-10-09
  • 打赏
  • 举报
回复
2楼用的感觉非常奇怪呢!但是不知道可以不可以,估计可以!
另外
即使是这样
public class D impolements B{

private C c = new C();

int m(){ return c.m; }
...
}
也不可以!
c是成员
不可能说c中的方法成为了d的方法!
freesnail 2007-10-09
  • 打赏
  • 举报
回复
public class D implements B extends C
{
int g(){............}
}
这样可以的。
cl55 2007-10-09
  • 打赏
  • 举报
回复
public class D implements B exdents C

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

或,

public class D impolements B{

private C c = new C();

int m(){ return c.m; }
...
}
caiitly 2007-10-09
  • 打赏
  • 举报
回复
只是个模型,当然里面很多东西都省略了啊,关注重点啊。
lixrun 2007-10-09
  • 打赏
  • 举报
回复
int m(){}
int n(){}
int g(){}
String k(){}


public interface B extends A 这样也行?
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧