[Java 무작정 따라하기] 7. java 오버로딩, 오버라이딩 및 다형성과 형변환 학습하기

 Java 무작정 따라하기 

7. java 오버로딩, 오버라이딩 및 다형성과 형변환 학습하기

 

 

1. 오버로딩, 오버라이딩

 

  • 오버 로딩 (overloading)
    • 같은 이름의 메소드가 여러개 있지만, 매개변수의 유형과 개수가 다르게 하는 기술로써
    • 메소드 오버로딩 및 생성자 오버로딩 2가지 가 있고 둘 다 같은 개념이다.
  • 오버 라이딩 (overriding)
    • 상위 클래스가 가지고 있는 메소드를 하위 클래스가 재정의하여 사용하는 기술로써
    • 상속 관계에 있는 클래스 간에 같은 이름의 메소드를 재정의하는 기술을 오버라이딩 이라고 한다.

 

2. 다형성과 형변환

 

  • 다형성
    • 하나의 객체가 다양한 형상이나 다양한 기능을 가지는 것을 의미한다.
    • 하나의 클래스에서 오버로딩 된 메소드들은 유사하지만 조금씩 다른 기능을 수행한다.
    • 자식 클래스에서 재정의된 메소드 (오버라이딩)는 부모와 유사하지만 다른 기능을 수행한다.
  • 형 변환
    • 상속 관계에 있는 클래스 간에는 타입 변환이 가능하다.
      • 전혀 다른 두 클래스 간에 타입 변환은 금지되어 있다.
    • 하위 클래스에서 상위 클래스로의 형 변환은 문제가 없다.
      • 상위 유형의 변수는 하위 객체의 참조값을 가질 수 있다.

 

3. 클래스 및 인터페이스의 다형성

 

  • 클래스의 다형성
    • 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 오버라이딩 할 수 있다.
    • 같은 이름과 매개변수 및 반환형을 가지지만 몸체가 달라진다.
  • 인터페이스의 다형성
    • 자식 클래스들에서 상위 인터페이스의 메소드를 다르게 구현한다.
// 예제 1
Class A{
	public void func(){
    System.out.println("a");
    }
}

Class B extends A{
	public void func(){
    System.out.println("b");
    }
}

Class C extends B{
	public void func(){
    System.out.println("c");
    }
}

public class Test{
	public static void main(String[] args){
    	// A의 정의된 func가 아니
        // B에서 재정의된 func가 실행됨.
        A a = new B();
        a.func(); // b
        
        // C에서 재정의된 func가 실행된다.
        a = new C();
        a.func(); // c
    }
}
// 예제 2
class Employee{
	int nSalary;
    Sring szDept = null;
	public void doJob(){
    	system.out.println("Do Something!!");
    }
}

class Sales extens Employee{
	public Sales(){
    szDept = "Sales";
    }
	public void doJob(){
    	system.out.println("Do Something!!");
    }
}

class Development extends Employee{
	public Development(){
    szDept = "DevDept";
    }
    /*
	public void doJob(){
    	system.out.println("Do Something!!");
    }
    */
}

public class Company{
	public static void main (String[] args){
    	Employee emp1,emp2 ;
        emp1 = new Sales();
        emp2 = new Development();
        emp1.doJob(); // Do sales
        
        // Development 클래스에서 doJob()을 찾지만
        // 주석 처리되어 있어서 상위 Employee의 doJob()을 실행
        emp2.doJob(); // Do Something!!
    }
}

 

내용이 유익하셨다면 구독 및 좋아요 클릭 부탁드려요 :)

오늘 하루도 즐거운 하루 보내세요!