Major S-T-U-D-Y

5. Inheritance

rlo-lo 2024. 10. 15. 00:07

클래스 상속과 객체

 

extends  /// super class, sub class 다중상속 xx최상위 조상 클래스 : java.lang.Object

 

접근지정

1) private : super 클래스 내에서만 2) default : 패키지내 모든 클래스 3) protected : 같은 패키지 + 다른 패키지여도 상속받은 서브클래서에서 접근 가능4) public : 모든 클래스

 

생성자 호출

new에 의해 생성 시 서브 클래스 생성자 호출 → 슈퍼클래스 생성자 호출 → 슈퍼클래스 생성자 실행 → 서브클래스 생성자 실행

super() 지정없으면 기본생성자!!

- 반드시 첫 줄에 올 것 

 

 

업캐스팅 

Person → Student 일 때 

Stdent s = new Student() 

Person p = s ; // 업캐스팅 자동변환

- 슈퍼클래스의 멤버만 접근 가능 

 

 

다운캐스팅 

명시적 타입 변환 필요 

Student s = (Student) p; 

 

→ 업캐스팅된 레퍼런스로 객체 타입 판단하기 어렵다. 

instanceof : 레퍼런스가 가리키는 객체의 타입 식별

객체레퍼런스 instanceof 클래스타입 → true/false boolean 값 - 객체에 대한 레퍼런스만 사용 

 

메소드 오버라이딩 

: 슈퍼클래스의 메소드를 서브클래스에서 재정의 - 슈퍼 클래스 메소드의 이름, 매개변수 타입 및 개수, 리턴 타입 등 모두 동일시 - 메소드 덮어쓰기

→ 동적 바인딩 발생 : 서브 클래스에 오버라이딩된 메소드가 무조건 실행되는 동적바인딩 

 

오버라이딩은 실행시간 다형성을 실현한다. 

동적바인딩을 통해 실행 중에 다형성을 실현한다. → 실행할 메소드를 run time에 결정하고, 컴파일 타임 

 

 

추상메소드/추상클래스

 

abstract method

- 서브클래스에서 오버라이딩으로 구현

abstract class

1) 추상 메소드를 하나라도 가진 클래스 

- 클래스 앞에 반드시!!!! abstract 선언

- 메소드에도 당연히 abstract 선언 되어있겠지.. → 서브클래스에서 정의

 

 

2) 추상메소드가 하나도 없지만 abstract 선언된 클래스 

 

- 추상클래스는 객체를 생성할 수 없다. 

- but 레퍼런스! 참조변수는 가능

 

추상클래스 상속

1. 추상 클래스 단순 상속

추상 클래스를 상속받아 추상메소드를 구현하지 않으면 추상 클래스가 됨

→ 서브클래스도 당연히 abstract 선언해야 함

 

2. 추상 클래스 구현 상속

서브클래스에서 추상 메소드 구현 

→ 오버라이딩으로 구현했기에 서브클래스는 추상클래스가 아님!! 

 

 

 

인터페이스 

: 클래스가 구현해야 할 메소드들이 선언되는 추상형

접근지정자 interface 이름 {...}

- java7 까지는 상수와 추상메소드로만 구성

- java8부터 상수와 추상메소드 + default/private/static 메소드 포함 

인터페이스에는 필드(멤버변수) 선언불가

 

interface II {
	public static final int TIMEOUT = 10000; //어차피 상수이기에 final까지 생략가능
    public abstract void methoda(); //추상메소드 abstract까지 생략가능
    publc abstract void methodb();  //
    public abstract default void methodc(){ //접근지정자가 아니라!! 인터페이스로서 default method
    		System.out.print("dd"); 
            }; 
  }

 

디폴트 메소드 

추상메소드 취급 → 오버라이딩 가능하지만 하지않는다면 원래 있던 코드 사용!

 

구성요소 

상수 - public만 허용, public static final 생략

추상 메소드 - public abstract 생략

디폴트 메소드 - public 만 허용

private 메소드  - 인터페이스 내에 코드가 작성될 것!! private이므로 인터페이스 내 다른 메소드에 의해 호출 가능

static 메소드 - public private 모두 지정 가능 . 생략하면 public

protected 선언불가

 

객체 생성은 불가하지만 레퍼런스 참조변수는 가능!!

인터페이스 상속 서브클래스는 인터페이스의 모든 추상 메소드 반드시 구현해야 함 → 오버라이딩 강제 (툴)

 

implements

- 추상메소드를 모두 구현한 클래스 작성 + 추가 메소드 작성 가능

- 여러 인터페이스 다중상속 가능 

 

 

extends

인터페이스가 다른 인터페이스를 상속