JAVA 는 다형성을 위해 오버로딩과 오버라이딩을 지원합니다.

다양한 형태를 가질 수 있다 는 것을 다형성이라 칭합니다.



오버로딩 ( overloading )

같은 이름의 메소드에 매개변수의 유형 혹은 개수가 다른 경우를 의미합니다.

$ cat mozi.java
public class mozi
{
    public static void main(String[] args)
    {
        overloading(2018, 07);
        overloading("Mozi", 2018);
        overloading(2018, "Tistory");
        overloading(28);
    }

    public static void overloading(int a, int b){
        System.out.println("First Method : " + a + ", " + b);
    }

    public static void overloading(String a, int b){
        System.out.println("Second Method : " + a + ", " + b);
    }

    public static void overloading(int a, String b){
        System.out.println("Third Method : " + a + ", " + b);
    }

    public static void overloading(int a){
      System.out.println("Fourth Method : " + a);
    }
}
$ java mozi
First Method : 2018, 7
Second Method : Mozi, 2018
Third Method : 2018, Tistory
Fourth Method : 28


오버라이딩 ( overriding )

상위 클래스를 상속받은 하위클래스가 함수를 재정의 해서 사용하는 경우를 의미합니다.

$ cat mozi.java
public class mozi
{
    public static void main(String[] args)
    {
        Parent p = new Parent();
        p.name="Mozi Tistory";
        p.year=2018;
        p.overriding();


        Child c = new Child();

        c.blog="Tistory";
        c.name="Mozi";
        c.year=2018;
        c.overriding();
    }
}

class Parent {
    public String name;
    public int year;

    public void overriding(){
        System.out.println("Parent Class " + name + ", " + year);
    }
}

class Child extends Parent {
    public String blog;

    public void overriding(){
        super.overriding();
        System.out.println("Child Class " + blog + ", Parent Class " + name + ", " + year);
    }
}
$ java mozi
Parent Class Mozi Tistory, 2018
Parent Class Mozi, 2018
Child Class Tistory, Parent Class Mozi, 2018

Child 클래스(자식클래스)에서 Parent 클래스(부모클래스)의 함수 및 변수를 사용할 수 있는 이유는 extends 로 상속받았기 때문이며,

Child 클래스에서 함수 혹은 변수를 찾을 수 없는 경우, Parent 클래스에서 값을 참조하게 됩니다.



super 함수에 대해서는 다른 포스팅에서 설명드리겠습니다.