-
5일차 - 상속, 다형성프로그래밍 언어/자바(JAVA) 2024. 1. 29. 16:24
1. 상속의 개요
상속은 나에게 없는 것을 부모에게 물려 받아 원래 내 것 처럼 사용하는 것이다
상속의 중요성 및 목적
코드의 중복을 피한다
상속을 통해 누군가 만들어 놓은 기능을 내 것처럼 쓸 수 있다클래스 간 상속 관계를 만드는 이유 ①
여러 클래스에 흩어진 메소드를 사용해야 하는데, 이를 위해 각 클래스를 객체화하여 메소드를 호출해야 한다는 것이다
클래스 객체를 네 개나 선언하여 각각의 메소드를 호출하는 것이 번거롭고, 어떤 클래스에 어떤 메소드가 있는지 확인하는 것이 어렵다는 점이다 이 문제를 해결하기 위해 Operator 3이 Operator 4를 상속하고, Operator 2가 Operator 3을, Operator 1이 Operator 2를 상속받는 방법을 사용하여 모든 관련 메소드를 하나의 클래스에 몰아 넣는다최종적으로 Operator 1 클래스는 Operator 2, 3, 4 클래스의 모든 메소드를 상속받게 된다. 클래스 객체를 여러 개 선언하거나 각 클래스에 있는 메소드를 일일이 확인할 필요가 없어져서 편리해집니다. 그저 하나의 클래스를 호출함으로써 모든 관련 기능을 사용할 수 있다
2. 상속의 특징
주의사항
자바는 다중 상속을 허용하지 않는다
ㄴ 자바의 클래스는 분류이다. 그러므로 인간이 조류의 특성과 포유류의 특성을 동시에 상속받지 못하는 이유가 같다. 즉 조류일지 포유류일지 선택해야한다 (택일)객체화 순서
부모 클래스의 생성자가 먼저 호출되고, 그 후에 자식 클래스의 생성자가 호출된 후 자식 클래스의 객체가 생성되어 사용할 수 있게 된다
오버라이드
자식 클래스가 부모에게 상속받은 메소드를 다시 바꾸어 쓰는 것을 오버라이드라고 말합니다
주의사항
단 읽기 전용인 final 키워드가 붙은 메소드는 불가능하다
오버라이드 하는 이유
부모의 메소드 기능이 마음이 들지 않거나 아쉬운 경우 자식 클래스에서 직접 그 메서드를 수정하여 사용하고 싶을때 마찬가지로 꼭 메소드가 아닌 상속 받은 클래스가 마음에 들지 않아서 오버라이딩을 할 수도 있다
3. 다형성
다형성은 자식 객체가 부모 형태로 객체의 변수에 들어갈 수 있는 것을 말합니다 다만 부모 형태의 변수에 들어가면 자식 고유의 기능(메소드, 변수)는 사용할 수 없다
다형성은 왜 유용할까?
사용할 객체가 여러개라면, 각각의 객체에 대해서 생성자를 호출하고 형태에 맞게 변수를 선언한다. 그렇지 않고 다형성을 이용한다면 하나의 부모 타입 변수에 여러 자식 객체를 입력하여 ★★★★★
프로모션(묵시적 타입 변환, 자식 -> 부모)
캐스팅(명시적 타입 변환, 부모 -> 자식)
1. 상속이란?
부모가 물려준 것을 자식이 내것처럼 사용하는것을 말한다.
2. 상속은 부모가 물려준것을 자식이 내것처럼 사용한다고 했다. 내것처럼이란?
자식을 객체화하여 부모의 메소드나 변수를 사용하는것을 말한다
3. 상속의 키워드는?
extends, 기능의 확장, 범위의 확장을 말한다.4. 자바는 다중 상속이 안된다. 이유는?
클래스는 분류의 의미이므로, 사람을 예를 들면 포유류와 조류를 동시에 상속될 수 없는 것처럼 클래스는 다중 상속을 허용하지 않는다.
5. 상속의 장점
1. 코드 중복 방지
2. 자식 클래스에서 부모 클래스의 기능(메소드, 변수)를 사용할 수 있다
6. 상속을 못받는 것은?
private 키워드가 붙은 메소드 변수를 상속받을 수 없다. private 는 해당 클래스 내에서만 접근 할 수 있기 때문입니다
7. 오버로드와 오버라이드의 차이점은?
오버로드는
8. 오버라이드 안되는 경우는?
final 은 최초 값 초기화 후 변경할 수 없어, 오버라이딩이 불가능하다
9. 다형성이란?
자식 객체가 부모 객체 형태의 변수에 들어갈 수 있는 것 말합니다
10. 다형성의 장점은?
11. 프로모션과 캐스팅은?
프로모션은 묵시적 형변환으로 크기가 작은 데이터 타입에서 큰 타입으로 형태가 변환되는것을 말하고, 캐스팅은 명시적 형변환으로 과정이 프로모션의 반대이다
12. ???
'프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글
10일차 - Java I/O (0) 2024.02.05 9일차 - Iterator (0) 2024.02.02 8일차 - 컬렉션 프레임워크 (0) 2024.02.01 8일차 - 예외, 에러 (0) 2024.02.01 7일차 - String(스트링) (0) 2024.01.31