일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인텔리제이
- Java
- 핀트
- 개발
- AI투자
- 핀트후기
- 로보어드바이저
- 웹개발
- 핀트투자
- 직장인 소액투자
- 자바문법
- 직장인소액투자
- 자동투자
- git
- 직장인부업
- 핀트수익률
- 예외
- 직장인재태크
- 핀트투자후기
- 핀트 수익률
- fint 수익률
- 자바
- 코틀린
- 자바기초
- fint
- 핀트 후기
- 웹
- fint후기
- 소액투자
- 재태크
- Today
- Total
하루하루 살아남기
[Java / 자바 ] 클래스 형변환 본문
클래스 형변환
Animal animal = new Dog();
위 코드는 Animal 클래스를 가르킨다고 했지만 Dog클래스를 만들었습니다.
하지만 컴파일러는 아무런 오류도 발생시키지 않습니다.
묵시적 형변환이 일어난 경우입니다.
형변환은 두가지 경우가 있습니다.
1. 묵시적(암묵적) 형변환
2. 명시적 형변환
묵시적 형변환
더 큰 그릇에 작은 그릇의 값을 담는 경우입니다. 작은 그릇에서 큰 그릇으로 옮기는 것이므로 컴파일러는 문제를 발생시키지 않고 형을 바꿔줍니다.
명시적 형변환
반대로 큰그릇에서 작은 그릇으로 옮기는 경우 큰그릇의 값에 따라서 실행시 오류가 발생할수 있습니다. 따라서 컴파일러는 컴파일 시 오류를 발생시키고 명시적으로 형변환을 요구합니다.
public class Animal {
public void bark() {
System.out.println("동물이 울음소리를 냅니다.");
}
}
bark 메서드를 가지는 동물 클래스를 하나 만들었습니다.
이 동물 클래스를 상속받는 개 클래스가 있습니다. 이 개 클래스는 부모클래스에는 없는 dogRun이라는 메서드를 가지고 있습니다.
public class Dog extends Animal {
public void dogRun() {
System.out.println("개가 달립니다.");
}
}
상속은 kind of 관계에서 성립합니다. 즉 "개는 동물이다" 라는 관계가 성립하면 Dog 객체를 Animal형의 참조변수로 참조할수 있습니다. 만약 부모객체(동물클래스)가 자식 객체(개클래스)를 참조하게 되면 부모가 가진 메서드(bark)만 사용할 수 있습니다.
public class Dog extends Animal {
public void dogRun() {
System.out.println("개가 달립니다.");
}
public static void main(String[] args) {
Animal dog = new Dog();
dog.bark();
}
}
Animal형에 Dog객체를 참조하게 하였습니다. 이를 실행시키면
묵시적 형변이 일어나서 잘 실행됩니다.
즉 부모 타입인 동물로 개를 가르킬수 있다는 것입니다.
개클래스는 dogRun메서드도 가지고있습니다. dogRun을 실행시켜보겠습니다.
에러가 발생합니다.
이렇게 부모타입으로 자식을 가르킬수는 있지만 부모가 가진 메서드만 사용할 수 있습니다.
하지만 실제로 생성된 개 객체는 dogRun메서드를 가지고 있습니다. 부모 타입으로 가르키고 있어 사용할수 없는 것이므로 형변환을 이용하면 이 dogRun메서드를 사용할 수 있습니다.
Dog dog2 = dog;
Animal형인 dog변수를 Dog형인 dog2 변수에 대입해 보겠습니다.
에러를 발생시킵니다. 이때 명시적 형변환을 통해 형변환을 해주면 에러를 발생시키지 않습니다
이 형변환은 dog가 원래 Dog형이었기때문에 가능합니다. 즉 실제로 생성된게 개 객체였기 때문입니다.
'개발 > Java' 카테고리의 다른 글
[Java / 자바] 인터페이스의 Default (0) | 2021.03.30 |
---|---|
[Java / 자바 ] 인터페이스 (0) | 2021.03.28 |
[ Java / 자바 ] 오버라이딩 (0) | 2021.03.26 |
[Java / 자바 ] Super (0) | 2021.03.25 |
[Java / 자바] 추상 클래스 (0) | 2021.03.23 |