자바의정석 Chapter7. 객체지향 프로그래밍 2
상속이란
- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- extends 키워드를 사용함
- 기존 코드를 재사용할 수 있기 때문에 생성산과 유지보수에 좋음
class Parent {
}
class Child extends Parent{
//...
}
-상속에 대해서는 다시 정리를 해보겠습니다.
오버라이딩
- 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
- 자손 클래스에서 오버라이딩 하는 메서드는 조상클래스의 메서드와 다음과 같은 조건이 있습니다.
- 이름이 같아야 합니다.
- 매개변수가 같아야 합니다.
- 반환 타입이 같아야 합니다.
- 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없습니다.
- 조상 클래스의 메서드보다 많은 수의 예외를 선언 할 수 없습니다.
- 인스턴스메서드를 static메서드로 또는 반대로 변경할 수 없습니다.
class Parent {
int x;
int y;
String getCalculator(){
return x + y;
}
class Child extends Parent {
int z;
String getCalculator(){
return x + y + z;
}
}
super
- 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수입니다.
- 클래스메서드(static메서드)에서는 super를 사용할 수 없습니다.
- 인스턴스메서드에서만 사용할 수 있습니다.
[예제]
class SuperTest {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x=10;
}
class Child extends Parent {
int x=20;
void method() {
System.out.println("x=" + x);
System.out.println("this.x=" + this.x);
System.out.println("super.x=" + super.x);
}
[실행결과]
x=20
this.x=20
super.x=10
super()
- 조상클래스의 생성자 입니다.
- Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자, this() 또는 super()를 호출해야 합니다.
- 직접 호출하지 않아도 컴파일러가 자동으로 첫 줄에 생성 합니다.
package
- 클래스의 묶음입니다.
- 하나의 소스파일에는 첫 번째 문장으로 단 한번의 패키지 선언만을 허용 합니다.
- 모든 클래스는 반드시 하나의 패키지에 속해야 합니다.
- 패키지는 점 (.) 을 구분자로 계층구조로 구성합니다.
- 패키지는 물리적으로 클래스 파일을 포함하는 하나의 디렉토리입니다.
- package 지시어를 사용합니다.
import
다른 패키지의 클래스를 사용하기 위해서는 해당 클래스의 패키지 및 클래스명을 선언 해주어야 하는데 이를 import 한다 라고 합니다.
static
- 모든 자원에서 공유하기 위한 용도로 사용합니다.
- static이 붙은 변수 및 메서드는 인스턴스를 생성하지 않아도 사용 가능합니다.
static 멤버변수
- 모든 인스턴스에 공통적으로 사용되는 클래스변수
- 클래스변수는 인스턴스를 생성하지 않고도 사용 가능
-
클래스가 메모리에 로드될 때 생성
static 메서드
- 인스턴스를 생성하지 않고도 호출이 가능
- static 메서드 내에서는 인스턴스멤버들을 직접 사용할 수 없음
final
- 변수에 사용시 값을 변경 할 수 없는 상수가 됨
- 메서드에 사용시 오버라이딩을 할 수없게 됨
abstract
- 추상의 의미를 가지고 있습니다.
- 추상 클래스 - 클래스 내에 추상 메서드가 선언되어 있음을 의미
- 추상 메서드 - 선언부만 작성하고 구현부는 작성되지 않은 메서드
- 추상 클래스는 불안정한 클래스로써 그 자체로 인스턴스를 생성하지 못 합니다.
접근제어자
- 클래스단위, 패키지단위 등 접근을 제한할 수 있습니다.
- 캡슐화와 밀접한 관련이 있으며 외부로부터 데이터를 보호하기 위한 목적으로 사용됩니다.
접근제어자 종류
- private - 같은 클래스 내에서만 접근 가능
- default - 같은 패키지 내에서만 접근 가능
- protected - 같은 패키지 및 다른 패키지의 자손 클래스에서 접근이 가능
- public - 모든 곳에서 접근 가능
제어자 주의사항
- 메서드에 static과 abstract를 함께 사용할 수 없습니다.
- 클래스에 abstact와 final을 동시에 사용할 수 없습니다.
- abstract메서드의 접근 제어자가 private일 수 없습니다.
- 메서드에 private과 final을 같이 사용할 필요는 없습니다.
다형성
- 다형성이란
추상클래스
- 클래스를 설계도에 비유할 때 미완성 설계도라고 할 수 있습니다.
- 미완성 메소드가 포함되어있는 클래스 입니다.
- 인스턴스를 직접 생성 할 수 없고 자손에 의해 완성될 수 있습니다.
- abstract 키워드를 사용합니다.
- 추상화의 목적은 클래스간의 공통부분만을 그린 미완성 설계도를 이용하여 각각의 설계도를 완성하는것이 효율적
추상메서드
- 선언부만 있으며 구현부{} 가 없습니다.
// 추성 메서드
abstract 리턴타입 메서드이름();
// 일반 메서드
abstract 리턴타입 메서드이름(타입 변수명, 타입 변수명..){
// 구현 로직 내용
}
인터페이스
내부클래스
Reference
자바의 정석
댓글남기기