상속

2022. 5. 23. 22:51Java

◎ 상속 

-> 기존 클래스를 재사용하여 새로운 클래스를 만드는 것

-> 상속을 통해 적은 양의 코드로 새로운 클래스를 사용할 수 있다.

-> 상속을 하는 클래스를 "조상 클래스"라고 하고, 상속을 받는 클래스를 "자손 클래스"라고 한다.

-> 상속을 받는 클래스에 "extends 조상클래스" 를 붙여 상속 관계를 구현한다. 

-> 둘 이상의 클래스로부터 상속 받을 수 없다. 단일 상속만 허용한다.

class Parent{}
class Child extends Parent{}

-> 위 코드에서 Parent클래스에 새로운 멤버변수가 생기면 Child클래스에도 Parent클래스의 새로운 멤버변수를 사용할 수 있다.

-> 생성자와 초기화 블럭은 상속되지 않는다. 

-> 멤버만 상속된다.

-> 자손 클래스의 멤버 개수는 조상 클래스의 멤버 개수보다 항상 많거나 같다.

 

◎ 클래스 간 관계 - 포함관계

-> 포함관계는 상속이외의 클래스를 재사용하는 방법이다.

-> 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것이다.

class Circle{		
	int x;
    int y;
    int r;
 }
 
 class Point{
 	int x;
    int y;
}

-> 위 코드에서 Point클래스와 Circle클래스를 포함관계로 만들면

class Circle{
	Point c = new Point();
    int z;
}

-> 위와 같이 작성할 수 있다.

-> 예제

public class DrawShape {

	public static void main(String[] args) {
		Point[] p = {new Point(100,100), new Point(140,50), new Point(200,100)};
		
		Tri t = new Tri(p);
		Circle c = new Circle(new Point(150,150),50);
		
		t.draw();
		c.draw();
		}
	}

class Shape{
	String color = "purple";
	void draw() {
		System.out.printf("[color = %s]%n",color);
	}

}

class Point{
	int x,y;
	
	Point(int x, int y){
		this.x = x;
		this.y = y;
	}
	
	Point(){
		this(0,0);
	}
	
	String getXY() {
		return "("+x+","+y+")";
	}
}

class Circle extends Shape{	// Circle클래스와 Shape클래스는 상속관계
	Point center;			// Circle클래스와 Point클래스는 포함관계
	int r;
	int r;
	
	Circle(){
		this(new Point(0,0),100);
	}
	
	Circle(Point center, int r){
		this.center = center;
		this.r = r;
	}
	
	void draw() {
		System.out.printf("[center = (%d, %d), r = %d, color = %s]%n", center.x, center.y, r, color);
	}
}

class Tri extends Shape{
	Point[] p = new Point[3];
	
	Tri(Point[] p) {
		this.p = p;
	}
	
	void draw() {
		System.out.printf("[p1 = %s, p2 = %s, p3 = %s, color = %s]%n",
				p[0].getXY(), p[1].getXY(), p[2].getXY(),color);
	}
}

-> 결과

 

 

★ 참고 및 출처

자바의 정석

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76083001&partner=googlek&BSCPN=ORM&BSPRG=ADWORDS&BSCCN1=89221&utm_source=ADWORDS&utm_medium=cpc&utm_term=JAVA%C0%C7%C1%A4%BC%AE&gclid=Cj0KCQjwm6KUBhC3ARIsACIwxBh0GfDwaYEn-OxcsMebsH6l7xUyjucQnjB91bKGtzZvvFY8dkB1ULQaAnlhEALw_wcB

'Java' 카테고리의 다른 글

다형성(1)  (0) 2022.05.25
오버라이딩  (0) 2022.05.23
초기화 블럭  (0) 2022.05.23
생성자  (0) 2022.05.23
클래스 메서드 & 인스턴스 메서드  (0) 2022.05.22