2012-03-15 5 views
0

Было интересно узнать правильное определение переопределенного метода и метода переопределения. В моем понимании метод переопределения - это метод в подклассе, который переопределяет метод с тем же сигналом и возвращаемым типом в базовом классе.Ясность с переопределением метода

Я видел, однако, источники ссылаются на переопределенный метод как метод в подклассе, который переопределяет метод в базовом классе.

Так что это переопределенный метод и который является основным методом?

Извините, если это немного глупого вопрос

+0

Не забудьте принять один ответ как правильный! :-) –

ответ

2

Прямой пример из Java Documentation:

public class Animal { 
    public static void testClassMethod() { 
     System.out.println("The class" + " method in Animal."); 
    } 
    public void testInstanceMethod() { 
     System.out.println("The instance " + " method in Animal."); 
    } 
} 



public class Cat extends Animal { 
    public static void testClassMethod() { 
     System.out.println("The class method" + " in Cat."); 
    } 
    public void testInstanceMethod() { 
     System.out.println("The instance method" + " in Cat."); 
    } 

    public static void main(String[] args) { 
     Cat myCat = new Cat(); 
     Animal myAnimal = myCat; 
     Animal.testClassMethod(); 
     myAnimal.testInstanceMethod(); 
    } 
} 

Поэтому я использовал этот пример, как, посмотрите на сценарий с вашей реальной ситуации. A Animal может иметь определенные общие функции. Но Cat будет иметь некоторые функции, отличные от общего Animal, но некоторые функции, которые являются улучшением по сравнению с общими функциями Animal. Таким образом, Cat, похоже, переопределяет (будет содержать переопределяющие методы) функции Animal.

Другой простой пример, если вас интересуют автомобили. Скажем, есть Car. Он будет иметь метод acceleration. Но Ferrari, очевидно, будет лучше acceleration, чем Car. Но, Ferrari является Car. Таким образом, Ferrari переопределяет метод в Car. SO, метод переопределения находится в подклассе, а метод overriden - в базовом классе.

Итак, вы сейчас поняли? В подклассах присутствуют методы переопределения. Но методы, которые переопределены, присутствуют в базовом классе.

+0

Да, я получил это благодаря. Я понял это так. – Arianule

3
class A { 
    public void method() { 
     System.out.println("I don't know if I am overriden, but I'm not overriding anything"); 
    } 
} 
class B extends A { 
    public void method() { 
     System.out.println("I am overriding A.method() which has now been overriden"); 
    } 
} 

Вы также можете прочитать раздел JLS, описывающие переопределяет, реализующий, прятался, перегрузкой и т.д. для более глубокого понимания.

3

Давайте предположим, что мы имеем class SubClass extends SuperClass, то:

SuperClass#method <- overridden 
     ^
      | 
     overrides 
      | 
    SubClass#method <- overriding 

Кроме того, wikipedia говорит нам:

Реализация в подклассе переопределяет (заменяет) осуществление в суперкласса, предоставляя метод, который имеет одинаковое имя, те же параметры или подпись, и тот же тип возврата, что и метод в родительском классе.

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