2013-09-28 2 views
1

자바에서 객체 지향 프로그래밍을 이해하려고하는데이 문제가 있습니다.부모 클래스의 필드를 사용하여 객체를 인스턴스화하는 방법은 무엇입니까?

말은 예를 들어, 나는이 같은 aa는 부모 클래스 : 나는 초기 위치와의 초기 색상으로 말하자면, 사각형을 구성 할 수 있도록 내 아이 클래스를 어떻게해야합니까

public class Shape { 
    private int location; 
    private Color color; 
    // methods such as getLocation() and getColor() 

    public Shape(int initialLocation, Color initialColor) { 
     location = initialLocation; 
     color = initialColor; 
    } 


} 

주요 방법? Rectangle 클래스에 생성자를 생성합니까? 위치와 색상이 비공개 필드이기 때문에 그럴 수 없습니다. 위치 및 색상에 대한 접근 자 메서드를 만들고 인스턴스화 후 위치 및 색상 만 설정합니까? 내 생각 엔 접근 자없이이 작업을 수행 할 수있는 방법이 있습니까?

public class Rectangle extends Shape { 
    public Rectangle(int initialLocation, Color initialColor) { 
     super(initialLocation, initialColor); 
    } 

} 

난 그냥이 기본 개념 주위에 내 머리를 정리하고 수 없습니다. 어떤 도움이 필요합니까?

+1

상위 클래스의 생성자를'super (...)'호출로 재사용 할 수 있습니다. 또는 setter를 사용하십시오. –

+0

왜 지구상에서 '직사각형'이 '차량'을 연장합니까? –

+0

@RohitJain Vehicle? 어디에? – Dukeling

답변

4

재사용 생성자

public class Shape { 
    private int location; 
    private Color color; 

    public Shape(int location, Color color) { 
     this.location = location; 
     this.color = color; 
    } 
    // methods such as getLocation() and getColor() 
} 

public class Rectangle extends Shape { 
    public Rectangle(int location, Color color /*, more */) { 
     super(location, color); 
     // more 
    } 
} 

official tutorial

는 그것의 사용을 설명합니다.

+0

나는 당신의 제안에 따라 나의 코드를 편집했습니다. 감사! –

+1

@Giga 질문이 있으십니까? –

+0

예, 상속 계층이 더 긴 경우 예. 예를 들어, Shape -> MovingShape -> Rectangle과 같습니다. 같은 방식으로 MovingShape 클래스의 생성자를 만들어야합니다. 옳은? –

1

변수를 확장하려면 수정자를 protected으로 변경할 수 있으므로 상속 될 수 있습니다. 그렇지 않으면 private은 자식 클래스에 존재하지 않는 것과 같습니다.

1

그러나 인스턴스 변수를 protected으로 정의 할 수 있지만 이는 캡슐화의 객체 지향 원칙에 위배됩니다. 셰이프 클래스의 각 인스턴스 변수에 getter 및 setter를 사용합니다. 또한, Shape 내에서 생성자를 만드는 경우 Rectangle에서 수퍼 생성자를 호출하여 Rectangle에서 위치와 색상을 설정할 수 있습니다.

public class Rectangle extends Shape { 
    public Rectangle(int location, Color color) { 
     super(location, color); 
    } 
} 

만큼 당신이 모양에서 다음과 같은 생성자를 가지고 :

public class Shape { 
    // location and color define. 

    public Shape(int location, Color color) { 
     this.location = location; 
     this.color = color; 
    } 
    // getters and setters which are public for location and color 
} 
서브 클래스에서만 액세스 기본 클래스에서
0

개인 회원은 무의미하다! 이들을 읽으려면 적어도 공용 또는 보호 된 getter가 필요합니다. 작성하려면 최소한 공용 또는 보호 된 설정자 및/또는 초기화하는 생성자가 필요합니다.

관련 문제