返回类实例的抽象方法

时间:2014-03-06 02:55:11

标签: java

我有一个类,我想为自己的类返回实例创建一个抽象方法。
例如......

public abstract class A {
.........
public abstract Object getInstance();
}


public class B extends A {
 @Override
 public Object getInstance() {
    return this;
  }
}


public class C extends A {
 @Override
 public Object getInstance() {
    return this;
  }
}

以上代码,方法getInstance()无法强制返回子类BC的实例。这是我得到它的主要观点。我怎么能创建一个抽象方法来强制返回子类的实例?

4 个答案:

答案 0 :(得分:1)

您正在寻找的是通用方法:

public class Q22213940
{
    public static void main(String[] args)
    {
        final B b = new B();
        final C c = new C();

        System.out.println("b = b.getInstance() " + b == b.getInstance());
        System.out.println("c = c.getInstance() " + c == c.getInstance());
    }

    public static class C extends A
    {
        @Override
        public C getInstance()
        {
            return this;
        }
    }

    public static class B extends A
    {
        @Override
        public B getInstance()
        {
            return this;
        }
    }

    public abstract static class A
    {
        public abstract <T> T getInstance();
    }
}

为什么呢?这不起作用。

为什么你要这样做我不知道,这没有逻辑意义,你必须引用一个对象来开始调用.getInstance();,它只返回你相同的引用你已经有了。

答案 1 :(得分:0)

为什么不返回抽象类A本身?

public abstract class A {
  .........
  public abstract A getInstance();
}

答案 2 :(得分:0)

public abstract B getInstance();

在类中实现此方法将允许任何IS-A B代码返回。这是一个共变量返回,其中返回类型可以是类类型或类类型的子类。所以这将包括一个C类实例,因为C IS-A B通过继承,因为C从B扩展。

所以类可以像这样覆盖这个方法:

    public class C extends A { 

        public B getInstance(){ 
           return new C(); // return a C object 
        }

    }

答案 3 :(得分:0)

因为A是抽象的,所以无法创建它的实例。下面的代码将强制子类实现自己的实现。

public abstract class A {
  ............
  public abstract A getInstance();

}