关于抽象类的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...敲得太快了 越看越心寒 
Global site tag (gtag.js) - Google Analytics