티스토리 뷰
#. 상속과 변수
> 변수의 상속
- 자식 클래스는 부모 클래스 변수를 물려받아 사용할 수 있음
=> private로 정의된 변수는 상속되긴 하지만 접근할 수 있는 권한이 없음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
class Employee {
public String name;
int employeeNo;
private int salary; // private 선언 변수는 선언된 클래스 내부에서만 사용
int age;
public String jobTitle;
protected int deptNo;
String grade;
}
class Manager extends Employee { // Employee 클래스의 모든 변수들은 상속되지만,
String jobOfManage;
String boss;
}
|
cs |
- 부모 클래스의 멤버 변수는 자동으로 자식 클래스에 상속되어 들어감
- 부모 클래스가 가진 변수와 같은 이름의 변수를 선언하면, 부모 클래스의 변수는 상속되지 않음
자식 클래스에서 정의한 변수가 사용됨
- 동일한 이름으로 자식 클래스에 정의된 변수는 상속에서 제외
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Employee {
String name;
int employeeNo;
int salary;
int age;
String jobTitle;
int deptNo;
String grade;
}
class Manager extends Employee {
String jobOfManage;
String boss;
char grade; // grade 변수는 상속에서 제외되고, 자식 클래스에서 재선언
}
|
cs |
> super 예약어
- this 예약어
ㄴ 생성된 객체 자신에 대한 참조를 의미
ㄴ 멤버 변수와 메서드 매개변수의 이름이 같을 경우, 두 변수를 구분하기 위해 사용
- super 예약어
ㄴ부모 객체에 접근할 수 있는 참조변수로 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
class Employee {
String name;
int deptNo;
String grade;
}
class Manager extends Employee {
String boss;
char grade; // grade 변수는 상속에서 제외되고, 자식 클래스에서 재선언
void printGrade() {
this.grade = 'A'; // 자식 클래스의 멤버 변수 grade에 char 형의 값 할당
super.grade = "A등급"; // 부모 클래스의 grade 변수에 String 형의 값 할당
}
}
|
cs |
#. 상속과 메서드
> 메서드의 상속
- 부모 클래스가 가지고 있는 메서드가 자식 클래스로 상속되어 자식 클래스에서 사용 가능
1
2
3
4
5
6
7
8
9
10
11
12
|
class Camera {
String name;
int sheets;
public void takePicture() {
System.out.println(name + sheets);
}
}
class PolaroidCamera extends Camera {
int batteryGage;
}
|
cs |
> 메서드의 Overriding
- 부모 클래스의 메서드를 재사용하지 않고 새롭게 정의하여 사용하는 것
- 부모가 가진 메서드는 상속되지 않음
- 비교
ㄴ메서드 Overriding : 메서드 재정의
ㄴ 메서드 Overloading : 하나의 클래스에서 동일한 이름의 메서드를 여러 개 정의
- 자식 클래스에서 재정의된 메서드는 부모 클래스의 메서드와 메서드 이름, 매개변수의 유형과 개수가 동일해야 함
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Camera {
String name;
int sheets;
public void takePicture() {
System.out.println(name + sheets);
}
}
class PolaroidCamera extends Camera {
int batteryGage;
public void takePicture() {
System.out.println(name + sheets);
System.out.println(sheets);
System.out.println(name);
}
}
|
cs |
> 메서드 Overloading 과 Overriding
- 메서드 Overloading
ㄴ 하나의 클래스에 동일한 이름의 메서드가 여러 개 중복 정의되어 있는 것
ㄴ 메서드 매개변수의 개수나 타입이 달라야 함
- 메서드 Overriding
ㄴ 상속 관계에 있는 두 개의 클래스에서 부모가 가진 메서드와 동일한 시그니처(리턴 타입, 메서드명, 매개변수)를 가진 메서드가 자식 클래스에 재정의되어 있는 것
> super 예약어가 사용된 메서드 Overriding
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
class Camera {
String name;
int sheets;
public void takePicture() {
System.out.println(name + sheets);
}
}
class PolaroidCamera extends Camera {
int batteryGage;
public void takePicture() {
super.takePicture(); // 부모 클래스의 메서드를 suepr 예약어를 통해 호출
System.out.println(sheets);
System.out.println(name);
}
}
|
cs |
> Overriding과 final 예약어
- final 예약어는 변수, 메서드, 클래스 앞에 붙일 수 있는 Modifier
ㄴ final + 변수 : 상수
ㄴ final + class : 자식 클래스를 가질 수 없는 클래스
ㄴ final + 메서드 : Overriding 금지
- 부모 클래스가 가진 메서드를 자식 클래스에 잘못 Overriding하지 않고 상속을 통해 무조건 재용하도록 강조하기 위해 사용
출처 : SW Expert Academy
'Web > JAVA' 카테고리의 다른 글
[JAVA] 내부 클래스(Inner Class) (0) | 2019.08.12 |
---|---|
[JAVA] 추상 클래스(Abstract Class) (0) | 2019.08.12 |
[JAVA] 자바의 상속 (0) | 2019.08.08 |
[JAVA] 생성자 개요 및 자동 생성 방법 (0) | 2019.08.05 |
[JAVA] 자바의 Modifier (static, final, abstract) (0) | 2019.08.05 |