inheritance(상속)

JK·2022년 12월 21일
0

JAVA

목록 보기
11/28
post-thumbnail

1.상속이란

  • 부모클래스가 가지고 있는 속성과 메소드를 자식클래스가 활용할 수 있는 개념

2.상속 문법의 이해

접근제어자 [final/abstract] class 클래스이름 extends 상위클래스(super class) {
	추가할 멤버변수선언;
	생성자;
	추가할 메소드선언;
    }
  1. 기존의 클래스를 재사용해서 새로운 클래스를 작성
  2. 두 클래스를 부모와 자식 관계를 맺어줄 수 있다.
  3. 자식은 부모의 멤버를 상속받으나 private 멤버는 직접 제어 불가
  4. 자바에서는 다중 상속 x

3.상속의 필요 이유

  1. 처음부터 짜는 것이 아닌 기존의 프로그램을 상속받아 사용자에게 맞게끔 수정하여 사용 -> 일의 효율 증가
  2. 기존 프로그램은 검증이 잘 되어있으므로 버그도 적음

Ex

1.상속받은 클래스의 메소드 사용

1. ParentClass

package com.lec.ex01_parentchild;

public class ParentClass {
	String pStr="부모클래스";
	public ParentClass() {
		System.out.println("부모클래스(=Parent클래스+Super클래스)");
	}
	public void getPapaName() {
		System.out.println("아빠이름 : 홍길동");
	}
	public void getMamiName() {
		System.out.println("엄마이름 : 김길순");
	}
}

2. ChildClass

  • extends ParentClass : ParentClass 를 상속 (부모클래스는 하나만 올 수 있다)
package com.lec.ex01_parentchild;

public class ChildClass extends ParentClass{
	String cStr = "자식클래스";
	public ChildClass() {
	System.out.println("자식 생성자");
	}
}

3. ChildMain

package com.lec.ex01_parentchild;

public class ChildMain {
	public static void main(String[] args) {
		ChildClass child = new ChildClass(); 
		System.out.println(child.cStr);
		System.out.println(child.pStr);  //ParentClass의 pStr 사용 가능
		child.getPapaName();
		child.getMamiName();
	}
}
  • 출력
부모클래스(=Parent클래스+Super클래스)
자식 생성자
자식클래스
부모클래스
아빠이름 : 홍길동
엄마이름 : 김길순

2.좌표값 출력

1. Point

package com.lec.ex03_point;

public class Point {
	private int x;
	private int y;
	public Point() {
		System.out.println("매개변수 없는 Point(부모클래스(Super클래스, 상위클래스)) 생성자");
	}
	public Point(int x, int y) {
		System.out.println("매개변수 있는 Point 생성자");
		this.x = x;
		this.y = y;
	}
	public String infoPrint() {
		return "좌표 x = " + x + ", y = " + y;
	}
	public int getX() {
		return x;
	}
	public void setX(int x) {
		this.x = x;
	}
	public int getY() {
		return y;
	}
	public void setY(int y) {
		this.y = y;
	}
}

2.Point3D

  • Point class를 extends
  • x, y도 상속받았기에 z만 추가
package com.lec.ex03_point;

public class Point3D extends Point {
	private int z;  // 3차원이기에 z 추가
	public Point3D(int x, int y, int z) {
//		setX(x);
//		setY(y);
		super(x, y);       //상위클래스의 매개변수 2개인 생성자 함수 호출
		System.out.println("매개변수 있는 Point3D 생성자 함수 - x, y, z 값 초기화");
		this.z = z;
	}
//	public void infoPrint3D() {
//		System.out.println("좌표 x=" + getX() + ", y=" + getY() + ", z=" + z);
//	}
	@Override
	public String infoPrint(){	 //	infoPrint를 override : 좌표 x:2, y:1, z:1 (super.infoPrint이용)
		return super.infoPrint() + ", z= " + z;   	
	}
	public int getZ() {
		return z;
	}
	public void setZ(int z) {
		this.z = z;
	}
}

3. TestMain

package com.lec.ex03_point;

public class TestMain {

	public static void main(String[] args) {
		Point point1 = new Point();
		Point point2 = new Point(1, 2);
		System.out.println(point1.infoPrint());
		System.out.println(point2.infoPrint());
		System.out.println("======================");
		Point3D point3d = new Point3D(10, 20, 30);
		System.out.println(point3d.infoPrint());
	}
}
  • 출력
매개변수 없는 Point(부모클래스(Super클래스, 상위클래스)) 생성자
매개변수 있는 Point 생성자
좌표 x = 0, y = 0
좌표 x = 1, y = 2
======================
매개변수 있는 Point 생성자
매개변수 있는 Point3D 생성자 함수 - x, y, z 값 초기화
좌표 x = 10, y = 20, z= 30

this

  • this를 이용하여 매개변수를 초기화

1.Friend

package com.lec.ex07_this;

public class Friend {
	private String name;
	private String tel;
	public Friend() {
		System.out.println("매개변수 없는 생성자");
	}
	public Friend(String name) {
		this(); // == Friend()
		this.name = name;
		System.out.println("매개변수 1개인 생성자");
	}
	public Friend(String name, String tel) {
		this(name); // = Friend(name)
		this.tel = tel;
		System.out.println("매개변수 2개인 생성자");
	}
	public String infoString() {
		return name + " : " + tel;
	}
}

2.FriendName

package com.lec.ex07_this;

public class FriendName {
	public static void main(String[] args) {
		Friend hong = new Friend("홍길동", "010-9999-9999");
		System.out.println(hong.infoString());
	}
}
  • 출력
매개변수 없는 생성자
매개변수 1개인 생성자
매개변수 2개인 생성자
홍길동 : 010-9999-9999
profile
씨앗 개발자

0개의 댓글