2017-10-03 2 views
-3

"돌", "해초", "스프 래트"및 "파이크"의 4 가지 클래스가 있으며, 각각의 연속 클래스는 이전 클래스의 속성을 상속합니다.java 8의 속성 상속 인터페이스를 사용할 수 있습니까?

클래스 "돌"은 좌표와 클래스에 "해초"가 추가되어 평생과 성장률뿐만 아니라 새로운 해초 (옛날의 구분)의 탄생이 "스 플랫"에 추가되었습니다. 해초 먹기.

이러한 상속을 표현하기 위해 일반적인 Java 클래스를 사용해야합니까, 아니면 상속을위한 다른 방법이 있습니까?

+0

달성하고자하는 것을 보여주기 위해 UML 다이어그램을 만들 수 있습니까? – zappee

+1

먼저 인터페이스에 대해 읽어야합니다. https://docs.oracle.com/javase/tutorial/java/concepts/interface.html 둘째 : 코드/UML 다이어그램을 보여주십시오. 그러면 우리가 원하는 것을 그림으로 나타낼 수 있습니다. 달성하기 – Gianlucca

+1

해초는 어떻게 돌입니까? 상속이 여기에 적합하다고 들리지는 않습니다. 예를 들어, 좌표를 보관 유지하는 Location 클래스와 같은 합성을 고려합니다. 돌과 해초에는 각각 위치가 있습니다. –

답변

2

의미 상으로는 두 객체간에 실제 관계가없는 경우 클래스 상속을 직접 사용하지 않는 것이 좋습니다.

이러한 클래스에 동작의 특정 측면이 공통적이라는 사실을 나타내려면 이러한 속성 집합을 나타내는 인터페이스를 사용하는 것이 좋습니다. 이는 클래스가 여러 인터페이스를 구현할 수 있으므로 각 클래스에서 구현할 인터페이스를 선택하여 선택할 수 있기 때문에 작동합니다. 이것은 엄격하게 관련된 기능이 아닌 다른 기능의 선형 순서가 필요하지 않기 때문에 더 큰 유연성을 제공합니다.

예 : 당신은

public interface WorldObject {...} 
public interface Organism extends WorldObject {...} 
public interface Plant extends Organism {...} 
public interface Animal extends Organism {...} 
public interface Eater<T> {...} 

public class Stone implements WorldObject {...} 
public class Seaweed implements Plant {...} 
public class Sprat implements Animal, Eater<Seaweed> {...} 

1

구성이 상속 좋은 대안이있을 수 있습니다.

그래서 당신은 같은 Coordinates, LifeStyle으로 Consumer

을 추가로 수업을하고 수업

class Stone{ 
Coordinates coordinates; 
} 

class Seaweed{ 
Coordinates coordinates; 
LifeStyle lifestyle; 
} 

class Sprats{ 
Coordinates coordinates; 
LifeStyle lifestyle; 
List<Consumer<?>> consumers; 
} 

가 상속보다 더 나은 대안을 정의 할 것이다, 당신의 프로젝트에 따라 달라집니다.

관련 문제