【问题标题】:In Java, how do I call a base class's method from the overriding method in a derived class?在 Java 中,如何从派生类中的覆盖方法调用基类的方法?
【发布时间】:2010-09-21 02:25:46
【问题描述】:

我有两个Java类:B,它扩展了另一个类A,如下:

class A {
    public void myMethod() { /* ... */ }
}

class B extends A {
    public void myMethod() { /* Another code */ }
}

我想从B.myMethod() 拨打A.myMethod()。我来自C++ world,我不知道如何用Java 做这个基本的事情。

【问题讨论】:

    标签: java inheritance methods polymorphism


    【解决方案1】:

    您要查找的关键字是super。例如,请参阅this guide

    【讨论】:

    • 看起来在 C++ 中你可以调用一个特定的祖先方法,但不是 java,你可以将它向上传递...
    【解决方案2】:

    只需使用 super 调用它。

    public void myMethod()
    {
        // B stuff
        super.myMethod();
        // B stuff
    }
    

    【讨论】:

      【解决方案3】:

      答案如下:

      super.Mymethod();
      super();                // calls base class Superclass constructor.
      super(parameter list);          // calls base class parameterized constructor.
      super.method();         // calls base class method.
      

      【讨论】:

        【解决方案4】:

        super.MyMethod() 应在class BMyMethod() 内调用。所以应该是这样的

        class A {
            public void myMethod() { /* ... */ }
        }
        
        class B extends A {
            public void myMethod() { 
                super.MyMethod();
                /* Another code */ 
            }
        }
        

        【讨论】:

          【解决方案5】:

          调用 super.myMethod();

          【讨论】:

            【解决方案6】:

            我很确定您可以使用 Java 反射机制来做到这一点。它不像使用 super 那样简单,但它会给你更多的力量。

            class A
            {
                public void myMethod()
                { /* ... */ }
            }
            
            class B extends A
            {
                public void myMethod()
                {
                    super.myMethod(); // calling parent method
                }
            }
            

            【讨论】:

            • 这不会在代码中显示任何 java 反射,并且与其他代码相同。还有更多的答案吗?
            【解决方案7】:

            使用super 关键字。

            【讨论】:

              【解决方案8】:
              super.baseMethod(params);
              

              使用 super 关键字调用基本方法并传递相应的参数。

              【讨论】:

                【解决方案9】:
                class test
                {
                    void message()
                    {
                        System.out.println("super class");
                    }
                }
                
                class demo extends test
                {
                    int z;
                    demo(int y)
                    {
                        super.message();
                        z=y;
                        System.out.println("re:"+z);
                    }
                }
                class free{
                    public static void main(String ar[]){
                        demo d=new demo(6);
                    }
                }
                

                【讨论】:

                  【解决方案10】:

                  看,这里你重写了基类的方法之一,因此如果你想从继承的类中调用基类方法,那么你必须使用 super 关键字在继承类的同一个方法中。

                  【讨论】:

                    【解决方案11】:

                    如果你使用这些方法进行初始化,那么使用类 A 的构造函数并在类 B 的构造函数中传递 super 关键字。

                    或者如果你想从子类方法调用超类的方法,那么你必须在子类方法中使用 super 关键字,例如: super.myMethod();

                    【讨论】:

                      【解决方案12】:
                      // Using super keyword access parent class variable
                      class test {
                          int is,xs;
                      
                          test(int i,int x) {
                              is=i;
                              xs=x;
                              System.out.println("super class:");
                          }
                      }
                      
                      class demo extends test {
                          int z;
                      
                          demo(int i,int x,int y) {
                              super(i,x);
                              z=y;
                              System.out.println("re:"+is);
                              System.out.println("re:"+xs);
                              System.out.println("re:"+z);
                          }
                      }
                      
                      class free{
                          public static void main(String ar[]){
                              demo d=new demo(4,5,6);
                          }
                      }
                      

                      【讨论】:

                        猜你喜欢
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2013-03-23
                        • 2014-03-17
                        • 2011-06-01
                        • 2013-04-11
                        • 2017-06-22
                        • 1970-01-01
                        相关资源
                        最近更新 更多