[Java] 자바 #22, 추상클래스(Abstract), 오버라이딩(Overriding)
- 프로그래밍 언어/Java
- 2019. 2. 19. 22:33
추상클래스
- 객체를 직접 생성할 수 있는 클래스를 실체클래스라고 한다면
- 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상클래스라고 함
- 추상클래스가 부모, 실체클래스가 자식으로 상속관계를 통해 추상클래스의 모든 특성을 물려받는 형태로 쓰인다.
추상클래스의 용도
1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적
-> 혼자 개발할 때는 상관없지만 여러사람과 협업을 통해서 개발을 할때는 이러한 통일된 양식이 매우 중요하다. 통일된 양식이란 추상클래스, 인터페이스와 같은 구현부가 없는 추상화된 부분을 통일된 양식(명칭상의)으로 삼는다.
2. 실체 클래스를 작성할 때 시간을 절약
-> 공통적인 부분만 추상클래스에 작성하고, 차이점이 존재하는 부분은 실체클래스에 따로 작성하여 결과적으로는 다른 것만 작성하면 되기 때문에 효율적이다.(단, 양이 적은 경우는 비효율적이겠죠?)
추상클래스 선언!
public abstract class 클래스{
//필드
//메소드
//생성자
}
- > abstract 키워드를 접근지시자와 클래스키워드 사이에 붙여 표기한다.
추상메소드의 선언!
public abstract void method(){}
- > 접근지시자와 반환키워드 사이에 온다!
오버라이딩(메소드 재정의)
- 상속관계에 있는 클래스 A와 B(A부모, B자식)사이에서 부모클래스 A가 메서드 C를 가질때! 자식클래스 B는 자연스럽게 A클래스의 메서드 C를 상속받게 된다. 하지만 이는 자식클래스 B에서 원하는 기능이 아닐때! -> 오버라이딩을 통해서 자식클래스 B에서 한번더 메소드C를 정의하여 자식클래스 B만의 메서드 C를 가지는 것을 말한다.
- 덮어쓰기라고 생각하면 편할것 같다.
예제)
class OverrideParent {
// 멤버들.
public void hello() {
System.out.println("안녕하세요.");
}
}
class OverrideChild extends OverrideParent {
public void hi() { //얘는 그냥 hi메소드
System.out.println("안녕하세요.");
}
@Override //상속된 부모의 메소드를 감추고 자신이 다시한번 정의하는 작업.
public void hello() {
System.out.println("hi~");
}
}
추상클래스, 오버라이딩 예제
- 동물이라는 클래스가 있다고 하자. 동물에는 개, 고양이, 호랑이가 있다. 모든 동물은 1개의 목숨을 갖고 울음소리라는 행동을 한다.
- 이것을 코드로 표현해보자.
class abstract Animal{ //추상클래스
public int heart=1;
public abstract void sound();
}
class Dog extends Animal{
public void sound(){
System.out.println("멍멍!");
}
}
class Cat extends Animal{
public void sound(){
System.out.println("냐옹!");
}
}
class Tiger extends Animal{
public void sound(){
System.out.println("어흥!");
}
}
-> 목숨은 Animal 클래스에서 물려받은 그대로다~
'프로그래밍 언어 > Java' 카테고리의 다른 글
[Java] 자바 #24, 업캐스팅과 다운캐스팅(Casting) (0) | 2019.02.21 |
---|---|
[Java]자바 #23 final 키워드(클래스, 메소드) (0) | 2019.02.20 |
[Java] 자바 #21, 상속(Inheritance) (0) | 2019.02.17 |
[Java] 자바 #20, 생성자와 Getter,Setter 메소드 (2) | 2019.02.16 |
[Java] 자바 #19, workspace, project, package, class (0) | 2019.02.15 |