YS's develop story

JAVA error) The method must override or implement a supertype method 본문

Java

JAVA error) The method must override or implement a supertype method

Yusang 2020. 11. 6. 07:20

안녕하세요 오늘은 java문제를 풀다가 한 실수를 정리하려고 합니다 ~

 

 

바로 코드를 확인해 볼까요?

package javapractice;
public class JavaPractice {

	public static void main(String[] args) {
		
		Shape[] arr= {
				new Circle("Circle",5),
				new Rectangle("Rectangle",3,4),
				new Triangle("Triangle",5,5)	
		};
		
		double sum=0;
		for(Shape a: arr) {
			System.out.println(a.getName()+"면적 : "+a.getArea());
			sum+=a.getArea();
		}
		System.out.println("면적의 합 : "+ sum);
	}
}

class Shape{
	protected String name;
	
	Shape(String name){
		this.name=name;
	}
	
	String getName() {
		return name;
	}
}

class Circle extends Shape{
	private double radius;
	private final double PI=3.141592;
	Circle(String name,double radius){
		super(name);
		this.radius=radius;
	}
	@Override
	double getArea() {
		return radius*radius*PI;
	}
}

class Rectangle extends Shape{
	private double length;
	private double height;
	
	Rectangle(String name,double length,double height){
		super(name);
		this.length=length;
		this.height=height;	
	}
	@Override
	double getArea() {
		return length*height;
	}
}

class Triangle extends Shape{
	private double length;
	private double height;
	
	Triangle (String name,double length,double height){
		super(name);
		this.length=length;
		this.height=height;	
	}
	@Override
	double getArea() {
		return length*height*0.5;
	}
}

이 코드는 아래의 사진과 같이 에러가 발생합니다.

 

에러의 원인은 상위 클래스인 Shape에 오버라이딩 하는 메소드 getArea의 선언 및 정의가 없기 때문입니다.

Shape의 메소드 getArea를 사용하지 않더라도

하위클래스가 상속을 하여 사용하게 되면 상위 클래스에 무조건 선언이 있어야 합니다.

 

Shape 클래스에 getArea메소드를 다음과 같이 추가 해 줍시다.

이 때, 오버라이딩 되어야 하기 때문에 다른 클래스에 있는 getArea메소드와 반환형, 매개변수가 같아야 합니다.

어차피 Shape의 getArea메소드는 사용하지 않으니 return 0으로 해주었습니다.

class Shape{
	protected String name;
	
	Shape(String name){
		this.name=name;
	}
	
	double getArea() {
		return 0;
	}
	
	String getName() {
		return name;
	}
}

 

이처럼 코드를 수정하게 되면 아래와 같이문제없이 코드가 작동 됩니다.

 

Comments