본문 바로가기

안드로이드, 자바/자바

다형성

다형성이란? 

다양한 형태 또는 특성을 가진다는 의미

부모 클래스를 상속받은 자식 클래스의 인스턴스가 부모의 객체로도 사용되고 뿐만 아니라, 자식 클래스의 객체로도 사용될 수 있는 다양한 상황

 

즉, 하위 클래스의 인스턴스(객체)는 보다 위인 상위 클래스의 인스턴스(객체)로도 사용될 수 있다. 그러나 그 반대는 불가능하다. 

 

자식 클래스로 인스턴스를 생성하고 타입을 부모로 하면 부모의 자원만 쓸 수 있다. 그러나 오버라이딩한 거는 자식의 메서드로 실행된다.

이때 자식의 메서드를 바로 호출하고 싶다면 -> 캐스트가 필요하다. 

 

 

자식 클래스에서 오버라이딩된 부모 클래스의 원본 메서드를 호출하고 싶다면? -> super 사용

 

class Person{

    private int  age;
    private String name;

    Person() {}
    Person(String name, int age)
    {
        this.name = name;
        this.age = age;
    }

    void sss() {
        System.out.println("hello Class Person");}
    void who() {
        System.out.println("저는 사람입니다");}
}


class Student extends Person{
    private int grade;
    Student(){}
    Student(String name, int age, int grade){
        super(name, age);
        this.grade = grade;
    }

    void sss() {
        System.out.println("hello Class Student");}
    void who() {
        System.out.println("저는 학생입니다");}
    void isPerson(){
        super.who();
    }
    void isGrade(){
        System.out.printf("저는 %d반 입니다%n", grade);
    }
}

public class Interfaceexam {


    public static void main(String[] args)
    {
        
        
        Student s1 = new Student("mizuno", 22, 1);
        s1.isGrade();
        s1.sss();
        s1.who();
        // super 키워드를 사용하여 부모 클래스의 메서드 호출 가능
        s1.isPerson();

        // 캐스트를 통해서 하위 클래스의 자원에 접근
        Person p1 = new Student("iphone", 10, 2);
        p1.sss();
        ((Student) p1).isGrade();

    }
}