그 외/Java

상속과 다형성

poppy 2020. 9. 13. 14:41
반응형

상속과 다형성

상속이란?

- 상위 클래스에서 만들어진 필드와 메소드를 하위 클래스가 물려받는 것

다형성이란?

- 하나의 객체가 여러 가지 타입을 가질 수 있는 것

 

상속 선언을 하면 하위 클래스에서는 상위 클래스에서 만들어진 필드와 메소드를 만들지 않고도 만든 것과 같은 효과를 얻을 수 있습니다. 상속은 코드 중복을 제거하여 클래스를 간결하게 구현할 수 있게 합니다.

상속은 "class 하위클래스 extend 상위클래스" 형식으로 쓰면 됩니다

 

자바에서는 다형성을 실현하기 위해 상위클래스 타입의 참조 변수로 하위클래스 타입의 멤버를 참조할 수 있도록 합니다. 

"참조 변수의 수 <= 멤버의 수" 이 조건을 만족해야 참조할 수 있습니다.  

class Person {
    int age;
    int height;
    String name;
    
    public void print() {
    	System.out.println(name + "/" + age + "/" + height);
    }
}
class Student extends Person {
    age = 20;
    height = 170;
    name = "홍길동";
}
public class Inheritance {
	public static void main(String[] args) {
    	//다형성
    	Person p = new Person();
    	Student s = new Student();
        Person p2 = new Student();
        Student s2 = new Person(); //오류발생
        
        //상속
        s.print();
    }
}

위의 예시를 살펴보겠습니다. 상위클래스는 Person클래스이고, 하위클래스는 Student클래스입니다.

하위클래스가 상위클래스를 상속받은 것을 볼 수 있고, 하위클래스에서 선언없이 상위클래스의 필드를 쓸 수 있는 것을 볼 수 있습니다.

s.print();  Inheritance클래스에서 하위클래스가 상속받았기때문에 상위클래스의 메소드를 쓸 수 있는 것을 볼 수 있습니다.

"//다형성" 이라고 표시한 부분에서 하나의 객체가 여러 타입을 가지면서 다형성이 실현된 것을 볼 수 있습니다. 하지만 Student s2 = new Person(); 부분은 오류가 발생합니다. 그 이유는 다형성의 조건이 지켜지지 않았기 때문입니다. s2의 멤버 변수의 수가 참조 변수의 수보다 많기 때문에 오류가 발생합니다.

 

 

반응형