1.상속이란
- 부모클래스가 가지고 있는 속성과 메소드를 자식클래스가 활용할 수 있는 개념
2.상속 문법의 이해
접근제어자 [final/abstract] class 클래스이름 extends 상위클래스(super class) {
추가할 멤버변수선언;
생성자;
추가할 메소드선언;
}
- 기존의 클래스를 재사용해서 새로운 클래스를 작성
- 두 클래스를 부모와 자식 관계를 맺어줄 수 있다.
- 자식은 부모의 멤버를 상속받으나 private 멤버는 직접 제어 불가
- 자바에서는 다중 상속 x
3.상속의 필요 이유
- 처음부터 짜는 것이 아닌 기존의 프로그램을 상속받아 사용자에게 맞게끔 수정하여 사용 -> 일의 효율 증가
- 기존 프로그램은 검증이 잘 되어있으므로 버그도 적음
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
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