2015-04-09 2 views
0

Я знаю, что это возможно сделать это в Java:Можно ли расширить методы на Java?

public class animal {...} 

А потом

public class dog extends animal {...} 

Тогда вы можете написать все, что собака методы, которые могут получить доступ к методу животных.

Однако, мне интересно, есть ли способ перенести методы

, например

public void generateAnimal() {...} 

, а затем

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

Но это не проходит компилятор. Так что мой вопрос:

Можно ли наследовать методы на Java?

+3

Что вы думаете, что это было бы, если бы оно существовало? – khelwood

+0

Я так не думаю. Если вы расширите класс, вы можете вызвать 'super()' в методах, которые вы переопределите. Это самое похожее, о чем я могу думать. – fzzfzzfzz

ответ

1

Да.

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 

Таким образом, вы расширить функциональные возможности метода, но лучше использовать композицию вместо наследования.

0

Если они находятся в одном классе, нет. Тем не менее, если вы хотите, чтобы запустить все generateAnimal(), а затем добавить generateDog() конкретный код, который вы могли бы сделать это:

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

Я надеюсь, что помогает.

1

Да.

Это было сделано именно так, как вы показали там, без 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

1

Вы не можете расширить это метод, как вы описываете, но вы можете наследовать метод, а затем вызвать метод из суперкласса следующим образом:

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

    // Do subclass specific work here 
} 

метод не является объектом сама по себе. Должны быть названы методы.

Смежные вопросы