[11일차] 자바 - 다형성, instanceof, final상수, 추상화

SOSO·2022년 4월 28일
0

학원

목록 보기
10/59
post-thumbnail

다형성 (Polymorphism)

한 객체가 여러 타입이 될 수 있다는 것을 의미

업캐스팅, 다운캐스팅

부모 클래스
class Parent {
	int a = 100;
}

//자식 클래스
class Child extends Parent {
	int b = 200;
}

public class PolyMain01 {
	public static void main(String[] args) {
		Child ch = new Child();

		
		Parent p =ch; //자식클래스 타입 -> 부모클래스타입 형변환
		              //업캐스팅, 자동적으로 변환

		
		Child ch2 =(Child)p; //부모클래스타입 -> 자식클래스타입 형변환
		                      // 다운스캐스팅, 명시적으로 형변
	
	}
}

instanceof

객체 타입을 확인하는 연산자

class Parent {
}

class Child extends Parent {
}

public class test {
	public static void main(String[] args) {
		Parent parent = new Parent();
		Child child = new Child();

		System.out.println(parent instanceof Parent); // true
		System.out.println(child instanceof Parent); // true
		System.out.println(parent instanceof Child); // false
		System.out.println(child instanceof Child); // true
	}
}

출력 결과

true
true
false
true

//부모클래스 
class Parent {
	// Object의 toString()메서드 재정의
	@Override
	public String toString() {
		return "Parent 클래스";
	}
}

//자식클래스
class Child extends Parent {
	@Override
	public String toString() {
		return "Child 클래스";
	}
}

public class InstanceofMain {
	public static void main(String[] args) {
		Parent p = new Parent();

		// 컴파일시 오류는 없지만 실횅시 오류 발생
		// Child ch = (Child)p;

		// 지정한 객체가 명시한 타입을 사용할 수 있는지 여부 체크
		
		if (p instanceof Child) {
			Child ch2 = (Child) p;
			System.out.println(ch2);
		} else {
			System.out.println(p);
		}
	}

}

출력 결과

Parent 클래스

final 상수

값이 변하지 않는 값

  • 상수화
    • 변수에 final을 적용 시 상수를 의미한다.
  • 메서드에 final 표시
    • 메서드에 final을 적용 시 오버라이딩으로의 확장이 불가능하다.
  • 클래스에 final 표시
    • 클래스에 final을 적용 시 더 이상의 상속 확장이 불가능하다.

추상화

추상클래스는 일반클래스와 달리 미완성되어 있는 클래스이기 때문에 객체 생성이 불가능하고 상속관계를 맺은 자식 클래스가 객체 생성되어야 사용이 가능하다.

예시 코드

//추상클래스
abstract class A2 {
	// 멤버변수
	private int x;

	// 멤버메서드
	public void setX(int x) {
		this.x = x;
	}

	// 일반적으로 추상클래스는 하나 이상의 추상 메서드 명시
	public abstract void make();
}

//일반클래스에 추상클래스 상속
//추상메서드가 포함되어 있으면 반드시 추상메서드를 자식클래스에 구현해주어야
//자식클래스 객체 생성이 가능함
class B2 extends A2 {
	// 추상메서드 구현
	@Override
	public void make() {
		System.out.println("make 메서드");
	}
}

public class AstractMain02 {
	public static void main(String[] args) {
		B2 bp = new B2();
		bp.make();
	}
}
profile
한다 열심히

0개의 댓글