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 관계의 객체화를 한 후 오버라이딩된 메서드를 호출하면 자식클래스가 구현한 메서드가 호출된다. - 상속 : 자식은 부모이다. - 부모는 자식의 변수와 메소드를 쓰지 못하지만, 오버라이딩된 메소드는 사용할 수 있다. |
예제 | 부 모 클 래 스 | | 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 시에 알려준다.