关于抽象类的getInstance()方法的疑惑
smalltalker
2011-06-24
新手遇到个疑问:
在c#中: 通常抽象类是作为其他类的基类的,而且只能有子类进行实例化 例如:public abstract class A{} pubic class B:A{} 可以用:A b=new B(); 但不知道java中的某些抽象类用getInstance()方法返回了实例(这个实例是本身的还是子类的? 如果是本身的,那么抽象类有方法或属性么?(它里面的方法或属性应该在子类中实现啊?) 疑问ing. 本人是.net程序员,在自学java途中。。。 望达人相助啊。 |
|
red_devils
2011-06-26
抽象类可以有方法(以及实现)和属性.#getInstance()返回的实例是子类的,因为抽象类是不能实例化的.
|
|
smalltalker
2011-06-27
red_devils 写道 抽象类可以有方法(以及实现)和属性.#getInstance()返回的实例是子类的,因为抽象类是不能实例化的.
那它返回的是哪个子类呢? |
|
204_lwa
2012-07-04
smalltalker 写道 red_devils 写道 抽象类可以有方法(以及实现)和属性.#getInstance()返回的实例是子类的,因为抽象类是不能实例化的.
那它返回的是哪个子类呢? 那要视乎你的getInstance()怎么实现 |
|
204_lwa
2012-07-04
其实通常使用静态方法返回其子类实例的类 就已经表明了它的子类不应该再扩展其他新的方法了 只需要实现这个抽象类声明的方法就够了
简单来说 就是你看到抽象类的方法就是足够使用的了 这样太抽象了 举个例子 public abstract ClassParent{ public ClassParent getInstance(){ return new ClassChild(); } public void printMsg(String s); ClassChild1 extends ClassParent{ public void printMsg(String s){ System.out.println(s); } } } 还有其他的类似例子 比如ByteBuffer是抽象的,他提供了两个实现,直接与不直接。 分别提供两个静态方法得到两种实现的实例。 1、ByteBuffer.allocate(int); 2、ByteBuffer.allocateDirect(int); 为什么帮助文档里面没找不到两种实现的介绍,因为不需要了,抽象类ByteBuffer提供方法就已经是全部了。它的子类不再添加其它新方法了,只是实现。 通常你不会深究他的实现。除非你想了解更多关于它的实现细节。不过很大部分这种类都不提供源码。至少我经常找不到=。= |
|
204_lwa
2012-07-04
补充:代码敲错了
应该是new ClassChild1(); 少个1了 纠结 |
|
204_lwa
2012-07-04
还忘了个static 我勒个去 不好意思
|
|
204_lwa
2012-07-04
内部类少个class...敲得太快了 越看越心寒
|