코드 그라데이션
Day24-2. 참조자료형 형변환, 오버라이딩 예제 본문
참조자료형 형변환 예제
package mega.backend_onemore.Day24;
class A{
int a;
}
class B extends A{
int b;
}
class C extends A{
int c;
}
class D extends A{
int d;
}
public class ClassCastingTest1 {
public static void main(String[] args) {
A a = new B(); //업캐스팅
B b = (B)a; // 다운캐스팅
B[] listB = new B[10];
C[] listC = new C[10];
D[] listD = new D[10];
// 이렇게 세 번 수고할 필요가 없이
// 아래처럼 한방에 만들고 집어넣으면 된다!
A[] listA = new A[10];
listA[0] = new C();
listA[1] = new D();
listA[2] = new B();
// listA[2].b = 10;
// 이건 안 보인다. 부모 자체가 A이니까.
// 그래서 b로 형변환 해서 써줘야 한다는 것.
((B)listA[2]).b = 10;
B b1 = (B)listA[2];
if(listA[1] instanceof D) {
D d1 = (D)listA[1];
}
/*
이 코드는 instanceof 연산자를 사용하여 listA[1]이 D 클래스의 인스턴스인지 확인하고,
그렇다면 listA[1]을 D 클래스의 인스턴스로 다운캐스팅하고 d1 변수에 할당합니다.
즉,, listA[1]이 D 클래스의 인스턴스가 아니면 다운캐스팅을 시도하지 않습니다.
따라서 이 부분의 코드는 D 클래스의 인스턴스가 아닌 경우를 대비한 안전장치 역할을 합니다.
instanceof 연산자는 객체가 지정된 클래스 또는
해당 클래스의 하위 클래스의 인스턴스인 경우 true를 반환하고,
그렇지 않은 경우 false를 반환합니다.
따라서 이 코드는
listA[1]이 D 클래스 또는 D 클래스의 하위 클래스의 인스턴스인지 확인하고,
그렇다면 listA[1]을 D 클래스의 인스턴스로 다운캐스팅합니다.
*/
System.out.println(b1.b); //10 츨력 (형변환 전에는 0나왔을 터)
}
}
오버라이딩 예제
package mega.backend_onemore.Day24;
class Con1{
String hello(String name) {
System.out.println("Con");
return "Con"+name;
}
}
class Eng extends Con1{
String hello(String name) {
System.out.println("Eng");
return "Eng"+name;
}
}
class Kor extends Con1{
String hello(String name) {
System.out.println("Kor");
return "Kor"+name;
}
}
class Jpn extends Con1{
String hello(String name) {
System.out.println("Jpn");
return "Jpn"+name;
}
}
public class OverridingTest {
public static void main(String[] args) {
Con1 c = new Kor();
c.hello("대한민국");
// System.out.print(c.hello("한국"));
// Con한국이 나올 거라고 생각하지만, Kor한국이 나온다.
}
}
/*
이유는 hello 메소드가 문자열을 반환하기 때문입니다.
c.hello("한국") 코드는 hello 메소드를 호출하고,
그 반환값인 "Kor한국" 문자열을 출력하는 것입니다.
따라서 출력 결과는 Kor한국이 됩니다.
반면, 이전 질문에서는 c.hello("한국")을 호출한 후
반환값을 출력하지 않았기 때문에,
"Kor한국" 문자열이 반환되었지만 출력되지 않았습니다.
대신 hello 메소드 내부에서 println 메소드가 호출되어서
"Kor" 문자열이 출력되었을 뿐입니다.
*/
728x90
'Java > Mega' 카테고리의 다른 글
Day25. 추상화 (3) final, equals() (0) | 2023.04.17 |
---|---|
Day25. 추상화(1) 추상클래스, 추상메서드 (0) | 2023.04.17 |
Day24. 참조자료형 형변환, 오버라이딩 (0) | 2023.04.17 |
Day23. super (1) | 2023.04.17 |
Day22. 상속 도입.(21은 문제) (0) | 2023.04.17 |
Comments