2014-05-13 3 views
1

자식 클래스에서 메서드의 모든 내용을 다시 작성하고 해당 함수를 변경하려는 경우 왜 다른 이름으로 새 메서드를 작성할 수 없습니까? 차이점이 뭐야? 나는 이것이 간단한 질문이라는 것을 알고있다. 그러나 나는 프로그래밍에 익숙하지 않고 매우 혼란 스럽습니다. 고마워.왜 부모 클래스의 메서드를 재정의해야합니까?

+1

부모와 동일한 서명을 메서드에 제공하면 부모가 새 것으로 제공 할 기능을 바꿉니다. 다른 서명을 주면, 그것은 –

답변

1

그런 종류의 일에 공통적 인 기능에 다른 행동을 부여하는 것입니다. 예를 들어 모든 차량의 경고음을 들려 주겠지 만 Car Honk 's와 Moped Meep Meeps!

class Vehicle { 

    public void beep() { 
     System.out.println("Beep!"); 
    } 

} 

class Car extends Vehicle { 

    @Override 
    public void beep() { 
     System.out.println("Honk!"); 
    } 

} 

class Moped extends Vehicle { 

    @Override 
    public void beep() { 
     System.out.println("Meep Meep!");  
    } 

} 
1

이는 Polymorphism입니다. 링크를보십시오.

간단한 예제는 Java Collections 프레임 워크입니다. 인터페이스를 사용할 때 List 인터페이스가 있습니다. add 또는 size이 어떻게 작동하는지 알고 싶지 않습니다. 그것은 단지 작동해야합니다.

구현 측면에서는 ArrayList 또는 LinkedList에 대한 차이점이 항목 저장 방식에 따라 다릅니다.

이미 구현 된 수퍼 클래스의 메서드를 살펴볼 때 다른 동작을 사용하려면 하나의 메서드가 필요할 수 있습니다. 이제 현재 코드에서 메소드 호출을하는 척하십시오. 변수를 변경하지 않으려면 해당 메소드를 재정의하면 클라이언트는 기능을 사용하기 위해 코드를 변경하지 않아도됩니다.

+0

이 아닙니다. 그러나 이것은 실제로 무시되지 않습니다. 그것은 구현 중이다. 나는 deathlee가 이미 수퍼 클래스에서 구현 된 메소드를 오버라이드 (override) 할 것인지 묻고있다. – rethab

+0

알았어, 이해, 내 대답을 연장하려고합니다. – markusw

1

재정의는 재정의 상속을 사용하는 동안 사용할 수있는 기능입니다.

다른 클래스에서 확장 된 클래스가 부모 클래스의 기능 대부분을 사용하려고하지만 특정 경우에 특정 기능을 구현하려고 할 때 사용됩니다.

class Animal{ 

    public void move(){ 
     System.out.println("Animals can move"); 
    } 
} 

class Dog extends Animal{ 

    public void move(){ 
     System.out.println("Dogs can walk and run"); 
    } 
} 

class Cat extends Animal{ 

} 

public class TestDog{ 

    public static void main(String args[]){ 
     Animal a = new Animal(); // Animal reference and object 
     Animal b = new Dog(); // Animal reference but Dog object 
     Animal c = new Cat(); // Animal reference but Cat object 

     a.move();// runs the method in Animal class 
     b.move();//Runs the method in Dog class 
     c.move();//Runs the method super method 
    } 
} 

그래서 부모 클래스를 사용하여 당신은 필요한 곳에 당신이 그것을 대체 할 수 있습니다 동물을 확장하는 클래스의 각() 이동을 정의 할 필요 없어요.

관련 문제