我有一个类,我想为自己的类返回实例创建一个抽象方法。
例如......
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()
无法强制返回子类B
和C
的实例。这是我得到它的主要观点。我怎么能创建一个抽象方法来强制返回子类的实例?
答案 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();
}