1016 자바 복습기록_Object 1

cometeYoon·2024년 10월 16일

JAVA

목록 보기
1/2

1. intelliJ, jdk-21 설치

2. Object

모든 클래스가 Object클래스를 상속받는 이유

  • 필수적인 기능을 공통된 이름으로 사용하기위함.
  • 객체를 생성할 때 마다 필수적인 기능의 메서드를 반복해 정의할 필요가 없어짐.

(1) Object 다형성의 장단점

  • 모든클래스의 부모클래스(슈퍼클래스)이므로 모든 객체를 참조할 수 있다.
  • 메서드의 매개변수에 Object타입을 사용하면 어떤 객체든지 인자로 전달 할 수있는 장점이 있다.
  • Object를 통해 전달 받은 객체를 호출할때 Object가 가장 상위에 있는 부모이기 때문에 각 객체에 맞는 다운캐스팅 과정이 필요하다.
package lang.object.poly;

class Car {
	public void move() {
     System.out.println("자동차");
    } 
}
package lang.object.poly;

class Dog {
	public void sound() {
     System.out.println("멍멍");
    } 
}
package lang.object.poly;

public class ObjectPolyExample1 {
 
 Public static void main(String[] args) {
 	Dog dog = new Dog();
    Car car = new Car();
    //Object dog = new Dog(); 로 변경가능
    //Object car = new Car(); 로 변경가능
    // => 부모는 자식을 담을 수 있기때문.
    
    action(dog);
    action(car);
 }

 public static void action(Object obj) {
  //obj.sound(); ->컴파일오류, Object에는 sound()가 없다.
  //obj.move(); ->컴파일오류, Object에는 move()가 없다.

  //객체에 맞는 다운캐스팅이 필요하다.
  if (odj instanceof Dog dog) {
   	dog.sound();
  } else if (odj instanceof Car car) {
	car.move();
  }
 }
}
실행결과

멍멍
자동차

다운캐스팅 복습

  • 자식클래스의 레퍼런스가 부모클래스의 인스턴스를 참조하는 것
  • 부모클래스의 인스턴스를 자식클래스 타입으로 형변환하는 것
  • 참조 가능한 영역이 확대됨
  • 자동 형변환이 일어나지 않음 = 명시적(강제) 형변환 필요
  • 강제 형변환을 통해 구문 오류가 해결되더라도 실제 실행 시점에서 오류(실행 오류)가 발생하게 됨
    => 존재하지 않는 영역의 참조 위험성 때문
  • 무조건 다운캐스팅이 성립하는 것이 아니라 반드시 자식객체가 부모타입으로 자동 변환하면 부모타입에 선언된 필드와 메소드만 사용 가능하다는 제약이 있다.
profile
개발블로그

0개의 댓글