«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags more
Archives
Today
Total
관리 메뉴

장미의 개발일기

인터페이스와 상속: 클래스와 같이 사용해보기 본문

방통대 컴퓨터과학과

인터페이스와 상속: 클래스와 같이 사용해보기

민장미 2023. 4. 16. 15:35

Java 프로그래밍:  인터페이스~열거형 자료 등 4장 끝냈다.

실습으로 인터페이스, 클래스 이용해서 어제 만들어봤던 원,원기둥 계산 프로그램 해보려는데

한가지 오류로 엄청 오래 헤맸다.

----------------

인터페이스: Shape

class Circle implemtns Shape (구현) - 

class Cylinder extends Circle(상속)

---------------

처음엔 두 클래스를 전부 인터페이스를 구현시키게 하려다가 하다보니 틀린거 같아서 위와 같은

구조로 변경했다. 

이론대로(?) 다 짰는데  서브 클래스인 Cylinder의 생성자에서 오류가 나는거다.

그런데 아무리 검색해도 없고 ㅠㅠㅠㅠ 책을 다시 봐도 이론적으론 맞구 

 

Implicit super constructor Circle() is undefined. Must explicitly invoke another constructor

암묵적 슈퍼클래스 생성자가 정의 안됐고 , 명시적으로 다른 생성자가 있어야한다? 

첨엔 construcotor를 다른 단어로 생각해버려서 헛짓을 오래한 듯;;

해결방법은 초간단했다. 슈퍼클래스에 디폴트 생성자를 생성하는 것!

어휴 힘들다. 어제 파이썬 강의 손 못댔는데 진짜 들으러 간다... 듣고 운동하고 영어하고

다시 자바 연습하는게 오늘 목표 

package university;

interface Shape{
	public double getArea(); 
	//원넓이 구하는 메소드 추상으로 정의		
}
class Circle implements Shape{
	private int r; //필드 반지름
	
	public Circle() {}; // 문제의 그놈 
	
	public Circle(int a) {
		r = a;
	}//생성자: 반지름에 설정값 넣는 메소드
	
	public double getArea() {
		return r*r*3.1415;
	}//원의 넓이 구하는 메소드
	}	

//인터페이스와 클래스를 전부 구현,상속받는 서브 클래스 생성
class Cylinder extends Circle{
	
	Circle c; // 원클래스 객체 c
	
	private int height; //원기둥높이
	//int r은 private이라 직접 접근 불가
	
	public Cylinder(Circle a, int b){
		c = a;
		height = b;
	} // 생성자 , 높이에 값 설정 
	
	public double getVolume() {
		return c.getArea()*height;
	}//원기둥 구하는 메소드 
}

public class Class_Making {
	public static void main(String[] args) {
		Circle c = new Circle(10);
		Cylinder cy = new Cylinder(c, 5);
		double res = cy.getVolume();
		System.out.println(res);
		
	}

}