본문 바로가기
STUDY/JAVA

다형성(Polymorphism)1

by NOTEEE 2018. 1. 22.

다형성(Polymorphism) : 폴리몰피즘

 - 하나의 메소드나 클래스가 있을 때 이것들을 다양한 방법으로 동작하는 것을 의미한다.

클래스와 다형성

class Person{
    String name = "Person";
    void move(){
        System.out.println("사람이 탑승한다.");
    }
    
    void stop(){
        System.out.println("사람이 정지를 요청한다.");
    }
}
 
class Car extends Person{
    String name = "Car";
    void move(){
        System.out.println("차가 움직인다.");
    }
    
    // 하위클래스에서 오버라이딩.
    void stop(){
        System.out.println("차가 멈춘다.");
    }
    
    void add(){
        System.out.println("사람을 더 태운다.");
    }
}
 
class Bus extends Person{
    String name = "Bus";
    void move(){
        System.out.println("버스가 움직인다.");
    }
}
 
public class Polymorphism1 {
    
    public static void main(String[] args){
        Person person = new Person();
        Person car = new Car();
        Person bus = new Bus();
        
        person.move();
        car.move();
        // Car 클래스에 있는 메소드가 상위클래스 Person의 메소드를 오버라이딩 했다면
        // 인스턴스화 시킨 Car에 있는 메소드가 실행하게된다.
        car.stop();
 
        // 클래스 Car가 클래스 Person화 되었기때문에 에러발생한다.
        // car.add(); // 에러발생
        bus.move();
        
        System.out.println(person.name + "," + car.name + "," + bus.name );
    }
 
}
cs


Person car = new Car();

클래스 Car를 인스턴스화 시키는데 클래스 A를 데이터 타입으로 하고있다.

(클래스 Car를 인스턴스를 만들었지만 인스턴스는 클래스 A의 데이터 타입의 행세를 하고 있다.)

car는 부모클래스의 Person 행세를 하고 있기때문에 클래스 Car add 메소드를 호출하면 에러를 발생시킨다.

클래스 Car에 있는 메소드가 상위클래스 Person의 메소드를 오버라이딩 했다면 인스턴스화 시킨 Car에 있는 메소드가 실행하게된다.


- 효과 ?

car 인스턴스가 부모클래스인 Person인 것 처럼 동작할 수 있다.




'STUDY > JAVA' 카테고리의 다른 글

인터페이스와 다형성1  (0) 2018.01.22
다형성(Polymorphism)2  (0) 2018.01.22
Interface3  (0) 2018.01.22
Interface2  (0) 2018.01.22
Interface1  (0) 2018.01.22