2017-05-05 19 views
0

이미 존재하는 메소드를 오버라이드 (override) 해 abstract로서 설정하는 abstract 클래스/인터페이스를 구축하려고하고 있습니다. 이것이 가능한가?abstract 클래스에 의해 equals 메소드를 오버라이드 (override) 해, abstract로서 설정합니다. 클래스가 확장 되어도 구현할 필요가 있습니다.

코드 예제 :

public abstract class Box { 
    @Override 
    public abstract boolean equals(Object o); 
} 

또는

public interface Box { 
    @Override 
    boolean equals(Object o); 
} 

클래스와 위의 인터페이스는 모두 동일한 기능을 가지고 있어야하지만,이 모두 재정의 개체 방법과 동일 의미합니까? 내가 추상적으로 설정하더라도?

그래서 것이다이 작품 :

public class Tea extends Box { 
    @Override 
    public boolean equals(Object o) { 
     // TODO Auto-generated method stub 
     return false; 
    } 
} 
+7

시도해 보셨습니까? – chrylis

+0

당신의 개념이 정말 흔들리는 버디입니다. http://docs.oracle.com/javase/tutorial/java/index.html 자습서로 바로 시작하는 것이 좋습니다. – hagrawal

+0

@JornVernee 확실하니? – chrylis

답변

0

첫째, 인터페이스를 오버라이드 (override)하지 않는 방법. 따라서 equalsObject에서 무시하려면 인터페이스에 equals 메서드를 추가하십시오. 인터페이스는 대신 계약이라고 생각할 수 있습니다. 인터페이스를 구현하는 비 추상 클래스는 모든 인터페이스 메소드 (직접 또는 상속을 통해)를 갖게됩니다.

상속을 통해 추상 메서드를 만드는 것에 관해서는 실제로이 작업을 수행 할 수 있습니다. 따라서 추상 상자 클래스에서 추상 정의가있는 equals 메서드를 재정의하는 예는 Box을 확장하는 모든 클래스가 equals 메서드를 구현해야합니다.

@OskarEmilsson이 주석을 달았다면 이것을 수행하면 hashCode을 구현해야합니다. 왜냐하면 equals와 hashCode는 서로 일치해야하기 때문에 equals 객체는 동일한 hashCodes를 가져야합니다.