【问题标题】:Is it possible to extend Methods in Java?是否可以在 Java 中扩展方法?
【发布时间】:2015-04-09 21:57:23
【问题描述】:

我知道在 Java 中可以做到这一点:

public class animal {...}

然后

public class dog extends animal {...}

然后你可以编写任何可以访问动物方法的狗方法。

但是,我想知道有没有办法扩展方法

例如

public void generateAnimal() {...}

然后

public void generateDog() extends generateAnimal() {...}

但这并没有通过编译器。 所以我的问题是:

Java可以继承方法吗?

【问题讨论】:

  • 如果它存在,你认为它会做什么?
  • 我不这么认为。如果你扩展类,你可以在你覆盖的方法中调用super()。这是我能想到的最相似的事情。

标签: java inheritance methods


【解决方案1】:

您不能以您描述的方式扩展方法,但您可以继承该方法,然后从超类调用该方法,如下所示:

@Override
public void inheritedMethod() {
    super.inheritedMethod(); // This will call method from super class

    // Do subclass specific work here
}

方法本身并不是一个对象。方法是用来调用的。

【讨论】:

    【解决方案2】:

    是的。

    public class Animal {
       public void someAction() {
          System.out.println("from Animal class");
       }
    }
    
    public class Dog extends Animal {
       public void someAction() {
          super.someAction();
          System.out.println("from Dog class");
       }
    }
    
    public class Main {
    
      public static void main(String[] args){
          Animal dog = new Dog();
          dog.someAction();
      }
    }
    

    输出:

    from Dog class
    from Animal class
    

    所以你扩展了方法的功能,但最好使用组合而不是继承。

    【讨论】:

      【解决方案3】:

      是的。

      完全按照您在此处显示的那样完成,没有 extends generateAnimal() 并将该方法名称更改为 generateAnimal()

      这称为覆盖。并允许您使用注解@Override


      public class A {
      
          public void print(){
              System.out.println("Hello from A!");
          }
      
      }
      
      public class B extends A {
      
          @Override  // This method overrides A#print() 
          public void print(){
              System.out.println("Hello from B!");
          }
      
      }
      

      然后,调用一些动作,例如:

      B b = new B();
      b.print();
      

      将打印出来:

      Hello from B!
      

      这更广为人知的是Inheritance

      【讨论】:

        【解决方案4】:

        如果他们在同一个班级,没有。但是,假设您要运行所有 generateAnimal() 然后添加您的 generateDog() 特定代码,您可以这样做:

        public void generateDog(){
            generateAnimal();
            ///do the rest of generateDog()
        }
        

        希望对你有帮助。

        【讨论】:

          猜你喜欢
          • 2010-12-24
          • 2011-02-08
          • 2014-03-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-06-15
          • 2015-06-11
          相关资源
          最近更新 更多