티스토리 뷰

반응형

 

 

#. 상속과 변수

 

> 변수의 상속

  - 자식 클래스는 부모 클래스 변수를 물려받아 사용할 수 있음

    => 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

 

반응형
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday