본문 바로가기
✨ Java/etc

자바(JAVA) - 다형성(Polymorhpism) -1

by 환풍 2023. 7. 17.
728x90
반응형

 

다형성이란?

하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다.

자바에서는 이러한 다형성을 부모클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를  참조할 수 있도록 구현한다.

다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나이다.

 

How

  • 오버라이딩
  • 오버로딩
  • 형변환

 

오버라이딩(Overriding)

 - 주로 클래스나 인터페이스를 상속받아 부모 클래스에 있던 함수를 재정의해서 사용하는 것이다.

 

오버로딩(Overloding)

 - 같은 함수라도 인수만 다르면 얼마든지 정의하고 사용할 수 있다.

 

타입변환

 - 부모 클래스 변수에 자식객체 타입을 대입하면, 자동으로 타입 변환이 일어나는 것이다.

 

Animal Class

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
package johong.study_0719_three;
 
public class Animal {
    int age;
 
    //다형성 - 오버로딩
    public void Count() {
        System.out.println("동물 0마리");
    }
    
    public void Count(int count) {
        System.out.println("동물 " + count + "마리");
    }
    
    public void Count(int count, String type) {
        System.out.println("동물" + count + "마리 , " + "종류는 " + type );
    }
    
    //다형성 - 오버라이딩
    public void Count(Boolean yn) {
        System.out.println("동물입니다.");
    }
    
    public void Change() {
        System.out.println("사람이고, 나이는" + this.age +"살 입니다.");
    }
}
 
cs

 

Dog Class

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
package johong.study_0719_three;
 
public class Dog extends Animal {
    
    //다형성 - 오버로딩
    public void Count() {
        System.out.println("강아지 0마리");
    }
    
    public void Count(int count) {
        System.out.println("강아지 " + count + "마리");
    }
    
    public void Count(int count, String type) {
        System.out.println("강아지" + count + "마리 , " + "종류는 " + type );
    }
 
    //다형성 - 오버라이딩
    @Override
    public void Count(Boolean yn) {
        System.out.print("강아지는 ");
        super.Count(yn);
    }
 
    @Override
    public void Change() {
        System.out.println("강아지이고, 나이는" + this.age +"살 입니다." );
    }
}
 
cs

 

Main Class

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
37
38
39
package johong.study_0719_three;
 
public class Main {
 
    public static void main(String[] args) {
        //다형성 오버로딩
        Dog a = new Dog();
        
        a.Count();    
        a.Count(5);
        a.Count(5"시바견");
        
        System.out.println();
        
        //다형성 - 오버라이딩
        a.Count(true);
        
        a.age = 14;
        a.Change();
        
        Animal b = new Animal();
        b.age = 20;
        b.Change();
        
        System.out.println();
        
        //다형성 - 타입변환
        Animal c = new Dog();
        c.age = 92;
        c.Change();
        
        Dog a1 = new Dog();
        Animal b1 = (Dog) a1;
        
        System.out.println("동물 인가요? " + (b1 instanceof Animal)); 
        System.out.println("강아지 인가요? " + (a1 instanceof Animal)); 
    }
}
 
cs

형 변환에서 중요한 점으로,

부모 타입은 자식 타입을 담을 수 있지만, 자식 타입은 부모 타입을 담을 수 없다.

728x90
반응형

댓글