타입 변환
자바에서 타입 변환은 굉장히 편리한 도구 입니다.
기본 타입일 경우 Integer.parseInt와 같은 편리한 메소드로 모든 타입으로 변경 시킬 수 있습니다. 클래스 사이에서도 타입 변환이 생깁니다. 바로 자식타입객체가 부모타입의 변수로 자동으로 타입 변환이 일어나는 것입니다.
- 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있습니다.
자동 타입 변환
class A {
}
class B extends A {
}
B b = new B();
A a = b;
a == b //true
- 부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근 가능합니다.
public class Parent {
void method1() { ... }
void method2() { ... }
}
class Child extends Parent{
void method2() { ... }
void method3() { ... }
}
class ChildExample {
public static void main(String[] args) {
Child child = new Child();
Parent parent = child;
parent.method1(); // Parent 호출
parent.method2(); // Child 호출(오버라이딩)
parent.method3(); // 호출 불가능
}
- 다만 자식 객체에 오버라이딩된 메소드가 있다면 부모 메소드 대신 오버라이딩된 메소드가 호출됩니다!!!!
강제 타입 변환
자식 타입은 부모 타입으로 자동 변환되지만, 반대로 부모 타입은 자식 타입으로 자동 변환되지 않습니다.
하지만 강제 타입 변환이 가능합니다!!
Parent parent = new Child(); // 자동 타입 변환
Child child = (Child) parent; // 강제 타입 변환
이러면 child의 메소드를 사용 가능하다!!
다형성
다형성은 상속과 같이 객체 지향 프로그램에서 자주 중요한 개념입니다.
다형성(Polymorphism)은 객체 지향 프로그래밍의 중요한 개념 중 하나로, 하나의 인터페이스나 클래스를 사용하여 다양한 타입의 객체를 다룰 수 있는 능력을 나타냅니다. 다형성은 코드의 재사용성과 유연성을 높이는데 도움을 주며, 객체들 간의 관계를 보다 추상화하고 일반화할 수 있게 해줍니다.
위에서 배운 자동 타입 변환과 메소드 오버라이딩을 적절하게 사용해 다형성을 생성합니다.
필드 다형성
필드 다형성은 필드 타입은 동일하지만 대입되는 객체가 달라져서 실행 결과가 다양하게 나올 수 있는 것을 말합니다.
class Shape {
void draw() {
System.out.println("Drawing a shape");
}
}
class Circle extends Shape {
@Override
void draw() {
System.out.println("Drawing a circle");
}
}
class Square extends Shape {
@Override
void draw() {
System.out.println("Drawing a square");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Shape[] shapes = new Shape[3];
shapes[0] = new Circle();
shapes[1] = new Square();
shapes[2] = new Circle();
for (Shape shape : shapes) {
shape.draw(); // 다양한 객체들의 draw 메소드가 호출됨
}
}
}
필드에 대입 된 객체가 달라져 다른 메소드들이 실행되는 것입니다.
매개변수 다형성
매개변수 다형성(Parameter Polymorphism)은 다양한 타입의 객체를 하나의 메소드에 전달하여 처리할 수 있는 능력을 나타냅니다. 이는 메소드가 다양한 타입의 인자를 받아들이며, 각각의 인자에 맞게 적절한 동작을 수행할 수 있도록 하는 개념입니다. 메소드 오버로딩과 관련된 개념으로 이해할 수 있습니다.
class Calculator {
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Calculator calculator = new Calculator();
int sum1 = calculator.add(5, 10);
double sum2 = calculator.add(3.5, 2.7);
System.out.println("Sum of integers: " + sum1);
System.out.println("Sum of doubles: " + sum2);
}
}
객체 타입 확인
변수가 참조하는 객체의 타입을 확인하고자 할 때, instanceof 연산자를 사용할 수 있습니다.
boolean result = 객체 instanceof 타입;
이 예시는 이것이 자바다 책에 나온 예시인데 instanceof를 아주 잘 설명해주는 것 같아 가져왔습니다.
public void method(Parent parent) {
if(parent instanceof Child) { // parent 매개변수가 참조하는 객체가 Child인지 조사
Child child = (Child) parent;
}
}
// 자바 12부터 우측 타입 변수를 사용할 수 있습니다.
if(parent instanceof Child child){
//child 변수 사용
}
출처
이것이 자바다
https://product.kyobobook.co.kr/detail/S000061695652
'JAVA 공부' 카테고리의 다른 글
인터페이스에 대해(1) (0) | 2023.08.16 |
---|---|
추상 클래스와 봉인된 클래스 (0) | 2023.08.14 |
상속에 대해(1) (0) | 2023.08.13 |
메모리 사용 영역에 대해 (0) | 2023.08.08 |
Java 8, 11, 17 (0) | 2023.08.03 |