Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Algorithm
- C programming
- datastructure
- coding test
- Serialization
- stream
- 이스케이프 문자
- 이것이 자바다
- s
- 윤성우의 열혈 자료구조
- JSON
- Stack
- list 컬렉션
- insertion sort
- 혼자 공부하는 C언어
- buffer
- R
- Graph
- 윤성우 열혈자료구조
- C 언어 코딩 도장
- 메모리구조
- Selection Sorting
- 알기쉬운 알고리즘
Archives
- Today
- Total
Engineering Note
[Java] Inheritance 본문
Inheritance
Inheritance
- 상속 : 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것이다.
상속을 사용하는 이유
- 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다.
- 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.
Java에서 상속을 구현하는 방법
- 새로 작성하고자 하는 클래스의 이름 뒤에 상속 받고자 하는 클래스의 이름을 키워드 ‘extends’와 함께 서 주기만 하면 된다.
- 예시
- 새로 작성하려는 클래스의 이름이 Child이고 상속 받고자 하는 기존 클래스의 이름이 Parent라면 아래와 같이 작성하면 된다.조상 클래스와 자손 클래스
class Parent { int age; } class Child extends Prarent{ void play(){ System.out.println("놀자~"); } }
- 조상 클래스 : 상속해주는 클래스
- 부모 클래스, 상위(super) 클래스
- 자손 클래스 : 상속 받는 클래스
- 자식 클래스, 하위(sub) 클래스
부모 클래스와 자손 클래스의 포함관계
- 자손 클래스는 조상클래스의 모든 멤버를 상속 받기 때문에 Child Class는 Parent Class의 멤버들을 포함한다고 할 수 있다.
- 그리고 클래스는 멤버들의 집합이므로 클래스 Parent와 Child의 관계를 다음과 같이 표현할 수도 있다.

- 자손 클래스는 부모 클래스의 모든 멤버 변수를 상속 받기 때문에 Child Class는 부모 Class에 있는 멤버 변수를 따로 작성할 필요가 없다.
부모 클래스와 자손 클래스의 상속 관계도

오버라이딩
- 조상 클래스로부터 상속 받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다.
오버라이딩의 조건
- 메서드의 이름이 같아야 한다.
- 매개변수가 같아야 한다.
- 반환타입이 같아야 한다.
super
- super는 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다.
Object Class
- Object 클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다.
- 만약 아무 것도 상속 받지 않는 클래스가 있다면 자바 컴파일러가 컴파일 시점에 자동적으로 ‘extends Object’를 추가한다.
- Object 클래스에는 toString(), euqals()등과 같은 모든 인스턴스가 가져야할 기본적인 메서드가 구현되어 있다.
실습 코드
상속 기본 예제
package inheritance;
public class Parent {
int age;
protected void myWork(String name){
System.out.println(name + "은 축구를 가르친다.");
}
}
package inheritance;
public class Child extends Parent{
public void play() {
System.out.println("놀자!");
}
@Override
protected void myWork(String name) {
System.out.println(name + "은 축구를 한다.");
}
}
package inheritance;
public class Main {
public static void main(String[] args){
Parent parent = new Parent();
Child child = new Child();
parent.age = 50;
// parent.play();
parent.myWork("손웅정");
child.age = 30;
child.play();
child.myWork("손흥민");
}
}
- 자식 클래스에서 age 변수를 구현하지 않았어도 부모 클래스에 있기 때문에 사용이 가능하다.
- 자식 클래스에서는 부모클래스의 멤버변수, 메서드를 사용할 수 있지만 부모 클래스는 자식의 메서드 멤버변수를 사용할 수 없기 때문에 부모클래스에서 자식의 play() 메서드에 접근하면 안된다.
- 자식클래스에서 부모클래스의 myWork()메서드를 오버라이딩했다.
상속을 통한 코드의 유지보수 실습
package inheritance;
public class Point {
protected int x = 10;
protected int y = 20;
protected String getLocation() {
return "현재 위치 : " + "x:" + x + " y:" + y;
}
}
package inheritance;
public class Point3D extends Point {
int z = 30;
@Override
public String getLocation() {
// return "현재 위치 :" + " x:" + super.x + " y:" + super.y + " z:" + this.z;
return super.getLocation() + " z:" + z;
}
}
package inheritance;
public class Main {
public static void main(String[] args){
Point point = new Point();
Point3D point3D = new Point3D();
System.out.println(point.getLocation());
System.out.println(point3D.getLocation());
}
}
- 2차원 점을 표현하는 Point Class에 있는 멤버 변수 x, y가 3차원 점을 표현하는 Point3D Class에서 공통적으로 사용할 수 있기 때문에 상속을 받고 따로 x, y 변수를 구현하지 않았다.
- 자식클래스에서 오버라이드 한 getLocation메서드에서 super 참조 변수를 통해 부모의 메서드에 접근이 가능하고 이를 통하여 코드를 재사용할 수 있다.
- 코드를 재사용할 경우 장점 : 코드의 유지보수가 용이하다. 예를 들면 getLocation()에서 위치 값을 출력할 때 사용하는 String 값 “현재 위치”를 “지금 위치”로 바꾸려고 할 때 부모 클래스만 바꾸어 주면 된다.
Object 클래스 toString 오버라이딩
package inheritance;
public class Book {
String bookName;
String author;
double rating;
Book(String bookName, String author, double rating){
this.bookName = bookName;
this.author = author;
this.rating = rating;
}
@Override
public String toString() {
return "Book{" +
"bookName='" + bookName + "\'" +
", author='" + author + "\'" +
", rating" + rating + "\'" +
"}";
}
}
- Object 클래스는 모든 클래스의 조상 클래스이기 때문에 Object Class에 정의된 toString 클래스를 Book 클래스에서 toString 메서드를 오버라이딩 할 수 있다.
'Programming Language > Java' 카테고리의 다른 글
| [Java] Polymorphism (1) | 2022.09.22 |
|---|---|
| [Java] 변수의 종류 (0) | 2022.09.15 |
| [Java] Access Modifier, Encapsulation (0) | 2022.09.09 |
| [Java] Object Oriented Programming (0) | 2022.09.09 |
| [Java] Dependency (0) | 2022.09.02 |
Comments