2015-10-19 52 views
-2
public class Base { 
    public static void main(String[] args) { 
     Base b = new Derived(); 
     b.printName(); 
    } 
    public void printName() { 
     System.out.println(this.getClass()); 
    } 

} 

class Derived extends Base { 

} 

上面的代码打印派生类的名称。我怎样才能让它打印基类名称。请记住,代码用于分类问题。我实际上并不需要输出课程名称。我需要在printName中的this正好是Base的类型,即使在Derived实例中也是如此。这不是名称this,任何工作都可以。可能吗?Java中是否有任何非多态基类引用?

为了进一步指定问题。我在基类中使用的一些第三方库没有在派生类实例中完成他们的工作。我知道这是因为他们调用了我通过的this的getClass(),但没有得到他们预期的Class<?>。我该如何解决这个问题?

+0

为什么不直接要求'instanceof Base'?尽管一般来说,这表明一开始就是一个不可思议的设计。另外,除非特别指定一个工厂(或者只是测试,这次可能就是这种情况),否则要求在超类中要求一个子类。 –

+0

您是否意识到根类始终是“Object”的事实?因此,从“派生”的角度来看,您将如何指定何时停止攀升继承链? – Siguza

+0

@singhakash OP希望它是一个“派生”,但报告为“基础”。 –

回答

2

我认为你能做的唯一的事情是

System.out.println(Base.class); 

重命名基类时,某些图形用户界面甚至可以自动重命名这些。

+1

“GUI”是指“IDE”? – Siguza

+2

当然。当你在它的时候,将'printName()'方法标记为'final'以防止子类覆盖它。 –

+0

我不能这样做。我在基类中使用的一些第三方库没有在派生类实例中完成他们的工作。我弄明白这是因为他们调用了getClass()并且没有收到他们期望的类。 – nillith

0

这是不可能的,因为Java方法总是虚拟的(也就是说你可以重写)。

另请参阅:Are all method in java implictly virtual

+0

这不是关于Java方法是虚拟的。这是因为OP使用'this'。 –

相关问题