2013-06-09 1 views
1

이 오류를 수정하는 데 문제가 있습니다. 누군가 제발 도와 줄 수 있니? 내 프롬프트와 코드는 아래에 게시됩니다. Java 클래스/상속을 사용하는 중에 오류가 발생했습니다.

는 사각형을 캡슐화 슈퍼 클래스를 작성한다. 사각형에는 사각형의 너비와 높이를 나타내는 두 개의 특성이 있습니다. 그것은 사각형의 영역과 영역을 반환하는 메소드를 가지고 있습니다. 이 클래스에는 평행 육면체 또는 상자를 캡슐화하는 하위 클래스가 있습니다. 평행 육면체는 사각형을 기본으로하고 또 다른 특성 인 길이를가집니다. 그것의 면적과 부피를 계산하고 반환하는 두 가지 방법이 있습니다. 또한이 두 클래스를 테스트하기 위해 클라이언트 클래스를 포함해야합니다.

암시 슈퍼 생성자 Rectangle1() 미정이다

  public class Rectangle1 
     { 

     protected double width; 
     protected double height; 


     public Rectangle1(double width, double height){ 
     this.width = width; 
     this.height = height; 


     } 

     public double getWidth(){ 
     return width; 
     } 

     public void setWidth(double width) { 
     this.width = width; 

     } 
     public double getHeight(){ 
     return height; 

     } 

     public void setHeight(double height){ 
     this.height = height; 

     } 



     public double getArea(){ 
     return width * height; 
     } 

     public double getPerimeter(){ 
     return 2 * (width + height); 

     } 
     } 

    public class Box extends Rectangle1 { 
     protected double length; 

     public Box(double length){ 
      this.length = length; 
     } 

     public double getLength(){ 
      return length; 
     } 

     public void setLength(double length){ 
      this.length = length; 
     } 

     public double getVolume(){ 
      return width * height * length; 
     } 
    } 

    public class TestRectangle { 

    public static void main(String[] args) { 

    Rectangle1 rectangle = new Rectangle1(2,4); 
    Box box = new Box(5); 

    System.out.println("\nA rectangle " + rectangle.toString()); 
    System.out.println("The area is " + rectangle.getArea()); 
    System.out.println("The perimeter is " +rectangle.getPerimeter()); 
    System.out.println("The volume is " + box.getVolume()); 
    } 
    } 

오류가

public Box(double length){ 
    this.length = length; 
} 

이클립스 IDE에서 오류 메시지가 아래와 같이이다. 다른 생성자를 명시 적으로 호출해야합니다.

그리고 나는 그것을 실행하려고하면, 그것은 나에게 제공합니다 스레드에서

예외는 "주요"java.lang.Error : 해결되지 않은 컴파일 문제 : 암시 슈퍼 생성자 Rectangle1()는 정의되지 않습니다. 명시 적으로

at Box.<init>(Box.java:4) 
    at TestRectangle.main(TestRectangle.java:7) 

누군가가이 오류를 해결하는 방법에 저를 알려 주시기 바랍니다 수있는 또 다른 생성자를 호출해야합니까? 당신이 생성자, 더 aruments 생성자가 존재하지 않습니다 기본 을 썼다 때문에

public Rectangle1(double width, double height) { 
    this.width = width; 
    this.height = height; 
} 

, 그래서 super() 오른쪽 생성자를 찾을 수 없습니다 :

답변

1

귀하의 기본 클래스 Rectangle1 생성자가 있습니다. Box 생성자에 super(0, 0)을 작성해야합니다.이 생성자는 Rectangle1 생성자와 일치합니다.

+0

도움 주셔서 감사합니다. 이 문제를 어떻게 해결할 수 있습니까? – StackP

+0

@StackP 내 대답보기, 그것은 당신의 코드를 수정해야합니다. – Maroun

0

당신은 당신이 정의하는 슈퍼 클래스의 생성자를 호출해야합니다. 기본 생성자는 정의하지 않은 경우에만 존재합니다.

또한 당신은이 캡슐을 나누기로 부모에 의해 초기화되는 필드를 초기화하지합니다. 나는 당신이 이것을하는 것이 좋습니다.

public Box(double length){ 
    super(length, length); 
} 

이렇게하면 정의한 수퍼 클래스에서 생성자를 호출하고 해당 필드가 담당하는 필드를 설정하게합니다.

1

첫째, 모든 서브 클래스는 모든 생성자의 첫 번째 문으로 super(...)를 호출해야합니다. 이것은 약간의 고통이므로, Java는 super(...)에 대한 호출이없는 생성자의 시작 부분에 super()에 대한 호출을 추가합니다. Rectangle1에는 인수가없는 생성자가 없으므로 super()을 호출하려는 Java의 시도가 작동하지 않으므로 직접 추가해야합니다. 피터와 마룬이 이것을 다루었습니다.

더 큰 문제는 상자가 무엇인지 생각하지 않았다는 것입니다. Box (5) 란 무엇입니까? Rectangle1은 너비와 높이를 가지며 Box는 너비, 높이 및 깊이를가집니다. 모양이란 상자 (5)입니까? 귀하의 상자 생성자는 인수가 당신은 상자와 super(height, width)에 대한 호출에 대해 알아야 할 모든 것을 말해 기본 클래스로 모든 사각형 물건을 위임을 담당 볼 수있는이 생성자에서

public Box (double width, double height, double depth) 
{ 
    super (width, height); 
    this.depth = depth; 
} 

과 같이해야한다 .