hyeonga_code

Java의 신_Chapter 10_Inheritance 본문

Java

Java의 신_Chapter 10_Inheritance

hyeonga 2024. 3. 28. 07:59
반응형

 

2024.03.27

 

- 상속_Inheritance

-- 자식 -> 부모

-- 부모 클래스는 기본 생성자만 있어도 된다.

-- 자식 클래스의 생성자가 호출되면, 자동으로 부모 클래스의 매개 변수가 없는 생성자가 실행된다.

-- 자식 클래스에서는 부모 클래스에 있는 public, protected 로 선언된 모든 인스턴스 변수와 클래스 변수, 메소드를 사용할 수 있다.

-- 하나의 부모 클래스만 가질 수 있다.

-- 실행한 후 부모 클래스를 수정한 경우, 부모 클래스를 재 컴파일 해야 이전에 컴파일 한 파일이 아닌 수정된 파일을 상속받아 사용한다.

더보기
public class Parent{
	public Parent(){}
}

public class Child extends Parent{
	public Child(){}
}

 

- super()

-- 부모 클래스의 생성자를 호출

-- 자식 클래스를 호출할 때, 자동으로 super()라는 문장이 실행

-- super()에 매개변수를 넘겨줄 수는 있으나, null이 넘어오는 경우 ambiguous 오류가 발생할 수 있으므로 기본 생성자를 호출하는 것이 바람직하다.

 

- 메소드 오버라이딩_Overriding

Child 클래스의 기능 
	ㄴ Parent 클래스의 기능

-- 부모 클래스에 선언된 메소드와 동일한 이름을 가진 메소드를 자식 클래스에서 선언할 수 있다.

-- 접근 제어자, 리턴 타입, 메소드 이름, 매개 변수 타입, 매개 변수의 개수가 동일해야 메소드 오버라이딩이다.

-- 동일한 시그니처를 가진다. == 동일하게 선언되어 있다.

-- 동일한 이름의 메소드가 있는 경우 자식 클래스에서 리턴 타입을 변경할 수 없다.

-- 접근 제어자는 축소할 수 없고, 확대는 가능하다.

---- public > protected > package-private > private

 

-- Overloading : 확장

-- Overriding : 덮어쓰기

 

-- 참조 자료형의 형변환

Parent parent = new Child();
	// 자식 클래스는 부모 클래스를 포함하므로 가능

Child child = new Parent();
	// 부모 클래스는 자식 클래스에 포함되므로 불가능
    

ParentCasting parent = new Parent();
ChildCasting child = new Child();
ParentCasting parentCasting = child;
ChildCasting childCasting = (ChildCasting)parent;
	// 형 변환이 필요하지만 예외가 발생함
   
ChildCasting child2 = new ChildCasting();
ParentCasting parent2 = child2;
ChildCasting child3 = (ChildCasting)parent2;
	// ParentCasting처럼 보이는 ChildCasting이므로 형 변환이 가능하다.

 

 

-- instanceof

---- 타입 비교

---- 부모 클래스로 먼저 타입을 비교하면 안된다.

------ 자식 클래스도 부모 클래스를 포함하고 있으므로 true라고 인식한다.

변수 이름 instanceof 타입
	// 변수의 타입이 확인하는 타입과 동일한지 true/false

 

 

-- 요약

더보기

-- 참조 자료형도 형 변환이 가능하다

-- 자식 타이의 객체를 부모 타입으로 형변환 하는 것은 자동으로 된다.

-- 부모 타입의 객체를 자식 타입으로 형 변환을 하는 경우 명시적으로 타입을 지정해주어야 한다.

---- 이 때, 부모 타입의 실제 객체는 자식 타입이어야 한다.

-- instanceof 예약어를 사용하면 객체의 타입을 확인할 수 있다.

-- instanceof 로 타입을 확인할 때 부모 타입도 true 라는 결과를 제공한다.

 

- 다형성_Polymorphism

-- 자식 클래스는 자신의 행위를 가질 수 있으나 부모 클래스에 선언된 메소드도 공유가 가능하다

-- 부모 클래스의 타입으로 변수를 선언, 자식 클래스의 생성자를 사용하는 경우 overriding된 메소드를 호출하면 자식 클래스에 선언된 메소드를 호출, 부모 클래스의 메소드도 공유가 가능하다.

 

더보기

1. 클래스를 상속 받아 확장하는 경우 extends 예약어를 사용한다.

 

2. 확장한 클래스가 생성자를 호출하는 경우, 자동으로 부모 클래스의 기본 생성자를 호출한다.

 

3. super 라는 예약어로 부모 클래스를 명시할 수 있다.

 

4. Overriding과 Overloading의 차이점

Overriding : 덮어쓰기

-- 자식 클래스에서 부모 클래스에 선언된 메소드의 선언 구문을 동일하게 선언하여 사용하는 것

Overloading : 확장

-- 상속관계와 상관 없이 메소드의 이름을 동일하게 하고, 매개 변수를 다르게 작성하는 것

 

5.  A가 부모, B가 자식 클래스인 경우 A a = new B();의 형태로 객체를 생성할 수 있다.

-- 부모클래스 변수이름 = new 자식클래스() : 가능

-- 자식클래스 변수이름 = new 부모클래스() : 불가능

---- 자식 클래스는 부모 클래스의 모든 내용을 상속받아 범위가 크다

 

6. 명시적으로 형변환을 하기 전 타입을 확인하는 예약어는 instanceof

 

7. 확인하려는 변수이름 instanceof 비교하는 클래스 이름

 

8. instanceof 예약어의 결과는 boolean 타입으로 반환된다.

 

9. 다형성은 자식 클래스는 자신만의 행위를 가질 수 있으나 부모 클래스에 선언된 메소드도 공유가 가능하다는 것을 의미한다.

반응형

'Java' 카테고리의 다른 글

Java의 신_Chapter 12_Object  (0) 2024.03.28
Java의 신_Chapter 11_API  (0) 2024.03.28
Java의 신_Chapter 09_Package  (0) 2024.03.28
Java의 신_Chapter 08_Reference Type  (0) 2024.03.28
Java의 신_Chapter 07_Array  (0) 2024.03.27