为子类的对象使用相同的超类方法

时间:2013-03-26 07:03:38

标签: java polymorphism

class A {
    void test() {
    }
}

class B extends A {
    void test() {
    }

 public static void main(String[] args)
{
 B b=new B();
//insert code here
}
}

如何为B类的对象 b 调用A类的test方法? 特别是对象b

3 个答案:

答案 0 :(得分:14)

您无法从外部 B ...中调用它,但 B中的可以将其称为:

super.test();

这可以从B中的任何代码完成 - 它不必在test()方法本身中。例如:

public void foo() {
    // Call the superclass implementation directly - no logging
    super.test();
}

@Override void test() {
    System.out.println("About to call super.test()");
    super.test();
    System.out.println("Call to super.test() complete");
}

请注意@Override注释,告诉编译器您确实 意味着覆盖方法。 (除此之外,如果您在方法名称中有拼写错误,这将有助于您快速找到它。)

你无法从外部B调用它的原因是B 覆盖方法......覆盖的目的是替换原始行为。例如,在带参数的方法中,B可能希望在调用超类实现或执行其他操作之前对参数执行某些操作(根据其自己的规则对其进行验证)。如果外部代码只能调用A的版本,那将违反B的预期(和封装)。

答案 1 :(得分:0)

班级本身就是错误。在定义类名时不应添加括号。 您可以使用对象类型转换或在类B的super.test()方法中调用test

class A
 {
 test()
 {}
 }

   class B extends A
  {
  test()
  {
   super.test()   // calls the test() method of base class
   }
   }


  B b=new B();

答案 2 :(得分:0)

这可以用于使用派生类对象调用基类方法。

b.super.test()