예 : customer
클래스에는 두 개의 하위 클래스 (guest
클래스 또는 signed-up users
클래스)가 있습니다. Customer class
은 인스턴스 변수로 username
입니다. guest class
도 username
을 인스턴스 변수로 갖고 있습니까? 고객 층의 methods
은 어떨까요?java의 두 클래스가 일반화 관계를 가지고있는 경우, 자식은 부모 클래스의 일부가 아닌 모든 클래스를 상속받을 수 있습니까?
답변
Guest 클래스 및 SignedUpUsers 클래스는 액세스 수준이 '비공개'또는 기본값 (액세스 수준이 지정되지 않음)으로 표시되지 않은 Customer 클래스의 모든 클래스 멤버 (메서드 및 변수)를 상속합니다.
예를 들어, username 변수의 액세스 수준이 public이거나 protected 인 경우 상속됩니다. 모든 방법에 똑같이 적용됩니다.
String username; // will not be inherited
private String username; // will not be inherited
protected String username; // will be inherited
public String username; // will be inherited
사실, 그것들은 모두 물리적으로 상속됩니다 (그 메소드는 서브 클래스의 메소드 테이블에 있습니다). 그러나 일부는 접근 할 수 없습니다 (그들이 상속받은 사실을 확인합니다). "기본"액세스는 패키지에 따라 다릅니다. –
Java의 상속은 모든 속성과 메소드가 하위 클래스에 존재한다는 점에서 항상 완료됩니다. "슈퍼"클래스에서 private로 선언 된 클래스는 서브 클래스에 표시되지 않지만 여전히있을 수 있습니다.
일부 상속을 생각하는 경우 가장 좋은 방법은 클래스 모델을 다시 생각하는 것입니다. 모든 특정 사례에 적용 할 수있는 다른 기본 클래스를 만듭니다 (따라서 username
속성 고객 클래스에서는 모든 고객이 고객 클래스를 가질 수 있어야합니다. Guest 객체가 해당 속성을 갖지 않게하려면 Customer에서 객체를 제거하고 SignedUpCustomer 클래스에 선언하면됩니다. 자바 인터페이스는 다른 경우에도 유용 할 수 있습니다.
답변 : 그것은 각각 다릅니다. –
@JStevenPerry 더 설명해 주시겠습니까? 무엇에 의존 하는가? – Hiep