方法使用super关键字覆盖

时间:2013-11-19 10:56:19

标签: java super override

我有一个疑问,请参阅以下代码。我有三个课程ABInheritanceExample。在这里,我从主类中调用super.run();它正在调用Brun()方法。

是否有任何选项可以从主类(A)调用InheritanceExample类运行方法而不创建类A的实例?

class A
{
    void run()
    {
        System.out.println("<<<====Class A run Method===>>>>");
    }
}

class B extends A
{
    void run()
    {

        System.out.println("<<<====Class B run Method===>>>>");
        super.run();
    }
}

public class InheritanceExample extends B{

    /**
     * @param args
     */
    void run()
    {
        System.out.println("<<<====Main Class run Method===>>>>");
        super.run();
    }
public static void main(String[] args) {
    InheritanceExample a = new InheritanceExample();
    a.run();
} 
    }

4 个答案:

答案 0 :(得分:0)

由于B 扩展 AInheritanceExample 扩展 B,您正在创建实例。使方法A.run() 静态

class A
{
    void static run()
    {
        System.out.println("<<<====Class A run Method===>>>>");
    }
}

class B
{
    void run()
    {
        System.out.println("<<<====Class B run Method===>>>>");
        A.run();
    }
}

public class InheritanceExample extends B {

    @Override
    void run()
    {
        System.out.println("<<<====Main Class run Method===>>>>");
        super.run();
    }

    public static void main(String[] args) {
        InheritanceExample a = new InheritanceExample();
        a.run();
    } 
}

答案 1 :(得分:0)

没有

不能使A.run()与B.run()不同,例如使A.run()静态。

当B扩展A时,作为程序员,您必须确保从呼叫者的角度来看B&#34; is-a&#34;答:你想要做的是打破这个规则。

如果你想使用B作为A,你可能试图在调用点做一些事情,应该在B内部处理。

答案 2 :(得分:0)

不确定要实现的目标。但是看一下类层次结构和结构,不可能直接调用类A的run方法。但是如果我们更改并引入一个额外的静态方法,请说A类中的runImpl,并从类A的run方法调用相同的方法。我们可以从任何地方调用runImpl,因为它是静态的,而内部运行方法是调用runImpl,所以同样的实现通过run和runImpl调用。

以下是代码段:

class A
{
    void run()
    {   
        runImpl();
    }

    public static void runImpl(){
        System.out.println("<<<====Class A run Method===>>>>");
    }
}

class B extends A
{
    void run()
    {

        System.out.println("<<<====Class B run Method===>>>>");
        super.run();
    }   

}

public class InheritanceExample extends B{

    /**
     * @param args
     */
    void run()
    {
        System.out.println("<<<====Main Class run Method===>>>>");
        super.run();
    }
    public static void main(String[] args) {
        A.runImpl();
    } 
}

答案 3 :(得分:0)

  class a{

      void run(){

          System.out.println("runing method run of a clss");

      }
  }
  class b extends a{
      void run(){
          super.run();
          System.out.println("runing method run of b clss");
      }

  }
  class InheritanceExample extends b{
      void run(){
          super.run();
          System.out.println("running method run in inheritance class");
      }
  }

  class pratics{
      public static void main(String[] args){
        System.out.println("********");
        InheritanceExample a1=new InheritanceExample();
        a1.run();
       System.out.println("********");
      }
  }