상속
2022. 5. 23. 22:51ㆍJava
◎ 상속
-> 기존 클래스를 재사용하여 새로운 클래스를 만드는 것
-> 상속을 통해 적은 양의 코드로 새로운 클래스를 사용할 수 있다.
-> 상속을 하는 클래스를 "조상 클래스"라고 하고, 상속을 받는 클래스를 "자손 클래스"라고 한다.
-> 상속을 받는 클래스에 "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);
}
}
-> 결과
★ 참고 및 출처
자바의 정석