상속

    상속의 장점

    1. 코드의 중복성 제거
    2. 다형적 표현 가능

    다형성(polymorphism) - 객체를 여러 가지 모양으로 표현할 수 있는 특징

     

    다형적 표현으로 얻을 수 있는 것

    : 여러 객체를 배열 하나에 관리할 수 있게 됨

     

    상속의 특징

    : 자바 클래스는 다중 상속이 불가능함

     

    생성자의 상속 여부

    : 생성자는 자식 클래스로 상속되지 않음


    객체의 타입 변환(casting)

    • 자바는 등호를 중심으로 왼쪽과 오른쪽의 자료형이 일치해야 함
    • 자료형이 다르면 컴파일러가 자동으로 타입을 변환해 주거나, 개발자가 직접 명시적으로 타입을 변환해야 함

     

    1) 업 캐스팅

    자식 클래스에서 부모 클래스로 변환 - 컴파일러가 자동으로 처리

    2) 다운 캐스팅

    부모 클래스에서 자식 클래스로 변환 - 개발자가 직접 명시

     

    선언 타입에 따른 차이점

    class A {
    	int m = 3;
    	void abc() {
    		System.out.println("A");
    	}
    }
    class B extends A {
    	int n = 4;
    	void bcd() {
    		System.out.println("B");
    	}
    }
    
    public class FruitSample {
    	public static void main(String[] args) {
    		B b = new B();
    		System.out.println(b.m); //부모 필드 호출 가능
    		System.out.println(b.n); //자신의 필드 호출 가능
    		
    		b.abc(); //부모의 메서드 호출 가능
    		b.bcd(); //자신의 메서드 호출 가능
    		
    		A a = new B();
    		System.out.println(a.m); //부모 필드 호출 가능
    		System.out.println(a.n); //자식 필드 호출 불가능
    		
    		a.abc(); //부모 메서드 호출 가능
    		a.bdc(); //자식 메서드 호출 불가능
    		
    	}
    }

     

    캐스팅 가능 여부를 확인하는 instanceof 키워드

    참조변수 instanceof 타입 -> true: 캐스팅 가능 / false: 캐스팅 불가능

    class A {
    	int m = 3;
    	void abc() {
    		System.out.println("A");
    	}
    }
    class B extends A {
    	int n = 4;
    	void bcd() {
    		System.out.println("B");
    	}
    }
    
    public class FruitSample {
    	public static void main(String[] args) {
    		A aa = new A();
    		A ab = new B();
    		
    		System.out.println(aa instanceof A);
    		System.out.println(ab instanceof A);
    		
    		System.out.println(aa instanceof B);
    		System.out.println(ab instanceof B);
    }

    메서드 오버라이딩

    부모 클래스에서 상속받은 메서드와 동일한 이름의 메서드를 재정의하는 것으로 부모의 메서드를 자신이 만든 메서드로 덮어쓰는 것

     

    메서드 오버라이딩의 조건

    1) 부모 클래스 메서드와 시그니처 및 리턴 타입이 동일해야 함

    2) 부모 클래스 메서드보다 접근 지정자의 범위가 같거나 넓어야 함

     

    메서드 오버라이딩과 접근지정자

    상속받은 메서드의 접근 지정자와 범위가 같거나 넓은 접근 지정자를 사용


    super와 super()

    • super는 부모 객체, super()는 부모의 생성자
    • 상속 관계에서만 사용 가능

     

    super() 메서드

    • 생성자의 내부에서만 사용 가능하며 반드시 첫 줄에 와야 함
    • this() 메서드도 생성자의 첫 줄에만 올 수 있으므로 이 둘은 1개의 생성자에 같이 쓸 수 없음
    • 모든 생성자의 첫 줄에는 반드시 this() 또는 super()가 있어야 함 - 만약 아무것도 명시되지 않을 경우 컴파일러가 super()를 자동으로 삽입

    최상위 클래스 Object

    자바의 모든 클래스는 object 클래스 상속

    아무런 클래스를 상속하지 않으면 자동으로 extends object를 삽입해 object 클래스를 상속

    자바의 모든 클래스는 어떤 객체로 만들든지 object 타입으로 선언할 수 있음

     

    object 클래스의 주요 메서드

    반환 타입 메서드명 주요 내용
    String toString() - Object 객체의 정보
    - 일반적으로 오버라이딩해서 사용
    boolean equals(Object obj) - 입력매개변수 obj 객체와 stack 메모리값 비교
    int hashCode() - 객체의 hashCode() 값 리턴
    - 위칫값을 기반으로 생성된 고윳값
    void wait()
    wait(long timeout)
    - 현재의 쓰레드를 일시정지 상태로 전환
    - notify(), notifyAll()로 일시정지 해제
    - 동기화 블록에서만 사용 가능

    'JAVA' 카테고리의 다른 글

    예외  (0) 2023.04.02
    인터페이스  (0) 2023.04.02
    접근지정자 - Abstract  (0) 2023.04.02
    접근지정자 - Final  (0) 2023.04.02
    접근지정자 - static(정적 멤버)  (0) 2023.04.02

    댓글