比如: 
class A 
{
   public void  f()
  {
      System.out.println("A.f");
   }
}class B extends A
{
  public void f()
  {
       System.out.println("B.f");
   }
}B是A的子类,现在需要在B方法f中必须调用A.f , 即如果按上面实现B,需要让编译器提示出错,正确的应该是:
class B extends A
{
  public void f()
  {
       System.out.println("B.f");
       super.f();
   }
}即某个方法必须强制让子类调用,不调用,这让编译器提示的错,有没有办法实现这点?  

解决方案 »

  1.   

    那就不是java语言了.
    呵呵,这样就能完成了,不过担心你做不了.
    1.扩展java文法,增加一个enforced修饰符,该修饰符强制每个覆盖了超类函数的函数必须调用超类的函数.
    2.实现自己的编译器
    3.再实现自己的虚拟机.(如果2中实现的编译器的目标语言不是bytecode,而是机器码的话,那么这一步可以省略.如果2中实现的编译器的目标语言是bytecode,并且遵循了sun的标准,那么这一步也可以省略)以上纯属开玩笑,楼主勿信.
      

  2.   

    5.0的编译器好像是自动调用基类的方法吧,不用显式调用,不是很清楚,达人帮忙解惑
    -----------------------------------------------------------------
    估计不会有什么语言会强迫子类的函数在覆盖超类函数的时候必须调用超类函数的.
    wuyupu(wuyupu) 说的不会是构造函数吧?
      

  3.   

    很不好意思,java语言中没有内建这种机制。
    不确定是否能够通过玩弄语言技巧来实现。
      

  4.   

    java语言中没有内建这种机制
    ----------------------------
    这种机制有点可怕,比如某个超类实现了某个方法,这个实现就简单是简单的抛出一个UnSurportedOperationException,现在一个子类继承了这个超类,你要是强迫它必须调用父类的方法,会怎么样,呵呵.
      

  5.   

    的确没有听说 过这种的情况。
    我觉得既然你明确要覆盖,难道怎么做你都不清楚。这个里面有个契约问题,这个是写文档中,并记在开发小组成员的大脑上,编译器估计帮不上忙。不知道 J2SE5 Meta 能帮上忙么?