Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
more
Archives
Today
Total
관리 메뉴

개인용블로그

추상 메소드와 오버라이딩 본문

JAVA/Java 기본

추상 메소드와 오버라이딩

김곰남친 2018. 12. 31. 10:50

추상 메소드
추상 클래스는 실체 클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해 놓은 추상적인 클래스이므로 실체 클래스의 맴버(필드, 메소드)를 통일화하는데 목적이 있다.
모든 실체들이 가지고 있는 메소드의 실행 내용이 동일하다면 추상 클래스에 메소드를 작성하는 것이 유리하다. 하지만 메소드 선언만 통일화 하고 각각의 기능은 달라야 하는경우도 있기에 추상 메소드 오버라이딩이 존제한다.
추상 메소드 오버라이딩은 실체 클래스마다 기능은 달라야 하지만 반드시 필요한 클래스라서 실체 클래스 각자 알아서 선언해 쓰라하기 곤란한 경우 사용한다.
실체 클래스에서 각각 선언하면 메소드 이름에서 오류가 날 수도 있고 메소드는 선언 안하는 경우를 고려한 것이다. 추상 클래스에서 추상 메소드를 선언해 놓으면 해당 추상 클래스를 상속받는 클래스는 반드시 추상 메소드를 제정의해야 한다. 아니면 컴파일 에러가 난다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
package AbstractClass;
 
public abstract class Animal {
    
    public String kind;
    
    public void breathe() {
        System.out.println("숨을 쉽니다.");
    }
    
    //추상 메소드이다. 자식클래스가 sound()메소드를 제정의 하지 않으면 에러가 난다.
    public abstract void sound();
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package AbstractClass;
 
public class Dog extends Animal{
    public Dog() {
        this.kind = "포유류";
    }
    /*아래 오버라이드 내용 주석처리하면 에러가 나는 것을 볼 수 있다.
         상속받은 Animal에서 sound()를 추상 메소드로 선언 하였기에 그렇다.*/
    @Override
    public void sound() {
        System.out.println("멍멍");
        
    }
    
}
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package AbstractClass;
 
public class Cat extends Animal {
    public Cat() {
        this.kind = "포유류";
    }
 
    @Override
    public void sound() {
        System.out.println("야옹");
 
    }
 
}
 
cs


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
package AbstractClass;
 
public class AnimalExample {
 
    public static void main(String[] args) {
        Dog dog = new Dog();
        Cat cat = new Cat();
        dog.sound();
        cat.sound();
        System.out.println("----");
        
        //변수의 자동 타입 변환
        Animal animal = null;
        animal = new Dog();
        animal.sound();
        //자동 타입 변화
        animal = new Cat();
        animal.sound();
        System.out.println("----");
        
        //메소드의 다형성
        animalSound(new Dog());
        animalSound(new Cat());
    }
    
    public static void animalSound(Animal animal) {
        animal.sound();
    }
 
}
 
cs


결과화면


멍멍

야옹

----

멍멍

야옹

----

멍멍

야옹



'JAVA > Java 기본' 카테고리의 다른 글

인터페이스 기본  (0) 2018.12.31
추상 클레스와 인터페이스를 이용한 다중상속  (0) 2018.12.31
추상 클래스 기본  (0) 2018.12.31
다형성 기본  (0) 2018.12.28
상속에서의 업케스팅 다운케스팅  (0) 2018.12.28