본문 바로가기

📚Study Note/JAVA

[ JAVA ] 클래스 고급 - 상속 (Inheritance)

● 상속(Inheritance)이란 

 

     새로 설계(생성)하고자 하는 클래스가 이미 설계되어 있는 다른 클래스의 기능과 중복되는 경우 이미 설계된 클래스의 일부분이나 전체 구조를 공유할 수 있도록 하는 기능을 의미한다. 즉, 상속은 객체를 좀 더 쉽게 만들 수 있는 고수준의 ★재사용성 (Reusability) ★을 확보하고 객체 간의 관계를 구성함으로써 객체 지향의 또 다른 큰 특징 중 하나인 『다형성』의 문법적 토대가 된다.

     상속은 기존 프로그램의 클래스 내용을 공유함으로써 중복된 코드들을 다시 작성할 필요 없이 반복적이고 세부적인 작업을 처리하지 않기 때문에 프로그램을 작성하는 시간을 절약할 수 있고 유지보수를 편리하게 할 수 있으며 프로그램의 길이도 짧아지게 된다. 또한, 이미 작성된 프로그램들은 앞서 테스트되었기 때문에 오류를 줄일 수 있어 현재 작성중인 프로그램에만 전념할 수 있다.

※ 주의할 점 : 자바는 다.중.상.속.을 지원하지 않기 때문에 두 개 이상의 클래스에서 상속받을 수 없다. 즉, 단일상속만 가능하다.(자식의 입장에서 한 명의 아버지, 부모 입장에서는 여러 자식이 가능하다.)

 

 

상속이라는 문법 중심에는 코드의 재사용 재활용이지만

실무입장에서 보면 그 둘의 관점으로 바라볼 게 아니라 내가 설계하고자하는객체의 밑그림 ? 정도로 상속을 이해하자,

 

class SuperTest106
{

	// 『protected』 : 상속받는 클래스, 동일 패키지에서 접근 가능한 접근제어지시자
	// default 는 상속안되고 protected는 된다.
	
	protected double area;
	
	// 생성자 - 사용자 정의 생성자(부모 클래스 생성자)
	SuperTest106()
	{
		System.out.println("Super class...");
	}
		
	//부모 클래스가 갖고 있는 출력 메소드
	void write (String title)
	{
		System.out.println(title + " - " + area);
	}
	
}
// 자식클래스, 하위클래스, sub class , 유도클래스, 자손클래스
public class Test106 extends SuperTest106
{

	// SuperTest106의 코드들이 extends 로 인해서 그대로 복사되어 내려오듯 내려온다.(물론예외있음)

	//생성자 - 사용자 정의 생성자(자식 클래스의 생성자)
	Test106()
	{
		//SuperTest106();
		// → super();  //엄밀히 말하면 이곳에 부모클래스의 생성자가 있다.
		System.out.println("Sub Class ....");
	}
	
	
	public void circle()
	{
		int r=10;
		area = r*r*3.141592;
		write("원");
	}
	
	
	
	public void rect()
	{
		int w = 20, h=5;
		super.area =(double) w * h; //super → 현재클래스의 조상클래스
		super.write("사각형");
	}
	
	
	public static void main(String[] args)
	{
		Test106 ob = new Test106();

		/*
		Super class...
		Sub Class ....*/

		ob.circle(); //-==>>원 - 314.1592
		ob.rect();   //-==>>사각형 - 100.0


		
	}
}