|
这个主题共有 3 回复 / 1 页 [
]
|
|
|
|
|
|
static方法在继承中如何使用?
|
发表: 2004年10月13日 14:32
|
回复
|
|
我有这样一些类 父类: public abstract class Base { public static Base T(String param){ ????? ret.f(param); return ret; } public abstract void f(String param); }
子类: public class AAA extends Base{ private String data; public void f(String param) { data="AAA's"+param; } } 子类: public class CCC extends Base { private String data; public void f(String param) { data="CCC's"+param; } }
调用: public class Test { public static void main(String[] args) { AAA a = (AAA) AAA.T("orange"); CCC c = (CCC) CCC.T("apple"); } }
我现在想问的问题是 1. AAA.T()和CCC.T()是从Base继承过来的,这样用是否符合常理? 2. 在Base.T()中能不能得知是通过哪个类调用过来的,并通过该信息创建该子类的实例,调用子类覆盖的方法f(),最后返回该子类?
|
|
|
|
|
|
Re: static方法在继承中如何使用?
|
发表: 2004年10月18日 15:38
|
回复
|
|
1.可以用。不符合常理。 2.不能得知是通过哪个类调用过来
其实你可以将Base.T()方法独立出来,使用工厂模式实现你的目的。
|
|
|
|
|
|
Re: static方法在继承中如何使用?
|
发表: 2004年10月20日 14:24
|
回复
|
|
|
|
|
|
|
|
Re: static方法在继承中如何使用?
|
发表: 2004年12月31日 22:59
|
回复
|
|
1.首先使用static修饰,则表示方法与类实例无关,请仔细考量是否必要!
2."在Base.T()中能不能得知是通过哪个类调用过来的"这种事情在OO中应该尽量不出现,这里可以使用Templet method来处理.或者参考banq所说使用工厂来做!感觉你的这个结构比较别扭,如果是项目中使用的代码,最好重构一下!^+^
Templet method的参考代码如下: public abstract class Base{ public Base xxx(){ Base b = this.getX(); b.f(param); return b; }
public abstract f(String param);
public abstract Base getX(); }
public class AAA extends Base{ public f(String param){ } public Base getX(){ AAA a; ...; return a; } }
|
|
|
|