现在我有两个接口和两个类,他们之间的关系是这样的。
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 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中那样写。
...
}
{
int g(){............}
}
这样可以的。
另外
即使是这样
public class D impolements B{ private C c = new C(); int m(){ return c.m; }
...
}
也不可以!
c是成员
不可能说c中的方法成为了d的方法!
public class D
implements B {
public int g() {return 0;}
public int m() {return 0;}
public int n() {return 0;}
public String k() {return "";}
}
public class D impolements B{ private C c = new C(); int m(){ return c.m; }
...
}
这个方法可行,可我自己试又不行,不知道怎么回事!
int n(){}
int g(){}
String k(){}
public interface B extends A 这样也行?
把D类声明成静态的,也就是这样
public abstract class D impolements B
{
private C c = new C();
int m(){ return 1 }
}
不知道这样做对其他类创建D类对象和调用D类中的方法有没有什么影响
...
}
也不可以!
c是成员
不可能说c中的方法成为了d的方法!
=========================================
这只是一种pattern,是一种可行的解决方法。 不过这不是继承。
{
int g(){............}
}
{
int g(){............}
} 这样可以,把继承写前面,接口写后面。楼上说的对
下面是我修改后的程序如果你去思考,并且看了接口的相关知识,应该能够理解我的意思。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类的对象就可以只实现接口B中新创建的方法,而不用去管A类的。但我试过不行,我想搞清楚是那篇帖子搞错了,还是我的哪些地方搞错了,所以就提了这个问题。
就是这篇文章
http://www.wingwit.com/Article/WLBC/JSP/200612/30927_2.html
同样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在做事情.