2014-11-11 6 views
0

나는 Car라고 불리는 클래스와 Mazdamx5라고 불리는 Car의 확장 클래스를 가지고있다. Car의 속성을 포함하는 Mazdamx5를 확장하는 클래스를 만들 수 있지만 Mazdamx5의 수정되거나 재정의 된 속성이 포함되어 있습니까? 그렇지 않으면 복잡 할뿐입니다. 오, 그래, 중요한 부분을 잊어 버렸어. 어떻게하면 내 새로운 연장과 다른 패키지로 Car and Mazdamx5에서이 모든 작업을 수행 할 수 있습니까? 수입으로?이미 다른 클래스의 확장 인 클래스의 확장을 만들 수 있습니까?

답변

2

당신을 무시 이와 같은 클래스 계층 구조를 가질 수는 있지만 디자인의 함의를 조금 더 가깝게 고려해야합니다. 이와 같이 깊이 중첩 된 상속을 갖는 것은 많은 경우에 필요하지 않습니다.

각 클래스에 공유 필드가 있도록하려면 선언에 private 대신 protected을 사용하십시오.

이 완전히 합법적이다 :

public class Car { 

} 

public class Mazdamx5 extends Car { 

} 

public class SomeOtherCar extends Mazdamx5 { 

} 
+0

은 캡슐화를 위해 사적인 더 나은 필드를 가지고 있지 않습니까? (심지어 하위 클래스에서도 개인 데이터를 보호합니까?) – committedandroider

+0

@committedandroider 틀림 없음 예. http://stackoverflow.com/a/3182664/995891 - 또한 관심있는 사용자 : http://lassala.net/2010/11/04/a-good-example-of-liskov-substitution-principle/ whatever' Mazdamx5 확장은 여전히 ​​Mazdamx5 여야합니다. 페라리가되기를 원한다면, 당신은 잘못된 것을 확장하고 있습니다. – zapl

0

사용해보기. Mazdamx5를 확장하는 또 다른 클래스를 만드는 것은 완벽합니다.

내가 코드 예제이 경우

class Car{ 
    void carDrive() { 
     S.O.P("car drive"); 
    } 
} 
class Mazdamx5 extends Car{ 
     void drive() { 
     S.O.P("drive 2"); 
     } 
    } 
class Car2 extends Mazdamx5 { 
     void drive() { 
      S.O.P("Car 2 drive"); 
     } 
} 

에게 제공, Car2이 Mazdamx5 확장이 클래스, 메소드 Mazdamx5 (구동 방식)의 속성 및 contins 방법 자동차의 특성 (carDrive)

+0

사람이 내가 더 나은 downvotes를 적립하지에 대한 내 대답을 할 수있는 방법을 나에게 설명 할 수 있습니까? – committedandroider

관련 문제