컴퓨터 관련/JAVA 강의

java #14 다형성, 오버로드(overload), 오버라이드(override), Annotation

승명 2016. 12. 18. 19:28

java #14 다형성, 오버로드(overload), 오버라이드(override), Annotation

 
* 다형성(polymorphism)

- 같은 이름의 대상을 여러가지 형태로 사용할 수 있는 것
- method 다형성, 객체 다형성을 지원한다.
- 객체지향언어(OOP)의 3가지 특징 중 하나


* overload(overloading)

특징

하나의 클래스에서 같은 이름의 메소드를 여러개 작성하는 것.

규칙

접근지정자 반환형 메서드명은 동일하게 만들고 매개변수를 다르게 만든다.

장점

사용자 편의성 증대

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package day0214;
 
/**
* Overload 같은 이름의 메서드를 클래스에서 여러개 작성할 수 있는 방법.
*규칙, : 접근지정자, 반환형, 메서드명은 같고 호출시
* 구분될 수 있도록 파라메터(매개변수)를 다르게 만든다.
*
* @author SiSt
*/
public class Overload {
     public void printName() {
          System.out.println("Hong kil dong");
     }// printName
 
     public void printName(String name) {
          System.out.println(name);
     }// printName
 
     public void printStar() {
          System.out.println("☆");
     }//printStar
 
     public void printStar(int cnt) {
          for (int i = 0; i < cnt; i++) {
               System.out.print("★");
          }//for
     }//printStar
 
     public static void main(String[] args) {
          Overload over = new Overload();
          over.printName("lee soon shin");
          over.printStar(10);
     }// main
 
}// class
 
cs


* override(overriding)

특징

- 상속관계의 클래스에서 부모클래스의 method를 자식클래스에서 사용할때 자식클래스와 맞지 않는다면 자식클래스에서 부모클래스의 method와 동일한 method를 만들어 사용하는 것. 
- 다형성 중 하나

규칙

- 접근지정자는 달라도 된다. 반환형, 메서드명, 매개변수는 똑같이 만든다.
- 단, 접근이 잘되는쪽으로만 바뀌어질 수 있음, ex> protected(부모) -> public(자식)
- is a 관계의 객체화를 한 후 오버라이딩된 메서드를 호출하면 자식클래스가 구현한 메서드가 호출된다.
- 상속 : 자식은 부모이다.
- 부모는 자식의 변수와 메소드를 쓰지 못하지만, 오버라이딩된 메소드는 사용할 수 있다.

예제

 


 





 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package day0220;
/**
* 부모클래스
*/
public class OverrideSuper {// extends Object
     int i;
     public void pMethod() {
          System.out.println("부모메서드");
     }
     @Override
     public String toString() { // Override는 코드 작성시 메소드명을 잘못 작성할
//위험이 크다. Override를 할때, 메소드명을 잘못 쓰면 새로운 메소드를 생성한것이 된다.
//source작성시에 오버라이드 검증법 : Annotation, @Override
     return "Object의 toString을 Override했습니다.";
     }
}
cs





 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package day0220;
/**
* OverrideSuper의 자식클래스
*/
public class OverrideSub extends OverrideSuper{
     int k;
     public void cMethod(){
         System.out.println("자식메서드");
     }
     public void pMethod(){
        System.out.println("자식이 오버라이딩한 메서드");
     }
     public static void main(String[] args){
        //부모클래스 객체화 : 부모의 변수와 메서드 사용가능.
        OverrideSuper os = new OverrideSuper(); 
        //자식클래스 객체화 : 부모 및 자식 변수와 메서드 모두 사용 가능
        OverrideSub os1=new OverrideSub(); 
        os1.i=20;
        os1.pMethod();
        os1.k=30;
        os1.cMethod();
        //is a 관계의 객체화 : 부모의 변수와 메서드 사용 가능. 
        //override된 메서드를 호출하면 자식클래스의 메서드가 호출된다.
        OverrideSuper isa = new OverrideSub();          
        isa.i=100;
        isa.pMethod();//is a로 객체화하면 자식의 Overriding된 메서드 호출         
        System.out.println( isa.toString() ); //isa.toString();         
     }
}
cs



*Annotation(주석달기)

- jdk1.5에서부터 제공되는 문법
- 클래스위, 메서드위, 변수위에 설정할 수 있다.
- @annotation명
- 경고 무시, override여부, 비추천 메서드 표현
   * 변수를 사용하지 않을 때
   * Generic을 사용하지 않을 때
   * 클래스의 고유번호(serial uid)를 사용하지 않을 때

@Override : Override 하는 method 위에 기술
  Override의 규칙이 잘못 되었다면 Compile 시에 알려준다.