일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SQL
- Redis
- Join
- 알고리즘
- 이것이 자바다
- docker
- mysql
- 배열
- 포트폴리오
- S3
- 디자인 패턴
- Til
- JPA
- LV.02
- Java
- 프로그래머스
- GIT
- 연습문제
- LV0
- spring boot
- LV01
- 데이터 베이스
- Lv.0
- CoffiesVol.02
- LV02
- 네트워크
- LV1
- 코테
- 일정관리프로젝트
- LV03
- Today
- Total
코드 저장소.
[이것이 자바다] Chapter7장 상속 본문
신용권 님의 ''이것이 자바다'' 7장 공부 기록
7.상속
7.1. 상속이란?
상속 은 부모가 자식에게 물려주는 행위를 말한다.
자식은 상속을 통해서 부모가 물려준 것을 자연스럽게 이용할 수 있다. 프로그램에서는
부모 클래스를 상위 클래스라고 부르고, 자식 클래스를 하위 클래스 또는 파생 클래스라고 부른다.
public class A{
int field1;
void method1(){}
}
public class B extends A{//B클래스가 A를 상속
String field2;
void method2(){}
}
B b = new B();
//A로부터 물려받은 필드와 메서드
b.field1 =10;
b.method1();
//B가 추가한 필드와 메서드
b.field2 = "홍길동"
b.method2();
1.부모 클래스에서 private 접근제한을 갖는 필드와 메서드는 상속 대상에서 제외된다.
2. 부모 클래스와 자식 클래스가 다른 패키지에 존재하면 default 접근 제한을 갖는 필드와 메서드도 상속대상에서 제외된다.
7.2. 클래스 상속
자식 클래스를 선언할 때 어떤 부모 클래스를 상속받을 것인지를 정하고 선택된 부모 클래스는 extends 뒤에 기술한다.
class 하위 클래스(자식 클래스) extends 상위 클래스(부모클래스){ //필드 //메소드 //생성자 }
1. extends가 붙어있는 상위 클래스는 다중상속을 허용하지 않는다.
7.3 부모 생성자 호출
//부모 클래스
public class People{
public String name;
public String ssn;
public People(String name,String ssn){
this.name = name;
this.ssn = ssn;
}
}
//자식 클래스
public class Student extends People{
public int studentNo;
public Student(String name, String ssn, int studentNo){
//부모생성자 호출
super(name,ssn);
this.studentNo = studentNo;
}
}
1.super(매개값,.....)는 매개값의 타입값과 일치하는 부모 생성자를 호출한다. 하지만 매개값의 타입과 일치하는 부모 생성자가 없는 경우 컴파일오류를 발생한다.
2.super(매개값....)이 생략이 되면 컴파일러에 의해서 super()가 자동으로 추가되기 때문에 부모의 기본 생성자가 존재해야 한다.
3.super(매개값...)은 반드시 자식 생성자 첫 줄에 위치해야 한다. 그렇지 않으면 컴파일 에러가 발생한다.
7.4 메소드 재정의
7.4.1 메소드 재정의(@Override)
class Parent{
void method1(){}
void method2(){}
}
class ChildExample{
public static void main(String[]args){
Child child = new Child();
child.method1();
child.method2();//재정의된 메소드 호출
child.method3();
}
}
class Child extends Parent{
void method2(){}//재정의
void method3(){}
}
- 메소드 오버라이딩은 상속된 메소드의 내용이 자식 클래스에서 맞지 않을 경우, 자식 클래스에서 동일한 메소드를 재정의 하는 것을 말한다.
- 메소드 오버라이딩시 규칙
- 부모의 메소드와 동일한 시그너처(리턴 타입, 메소드 이름, 매개변수 리스트)를 가져야 한다.
- 접근제한을 더 강하게 오버라이딩할 수 없다.-> 부모 메서드가 public인 경우 자식 메소드는 default나 private접근 제한으로 수정할 수 없다는 뜻이다.
- 새로운 예외를 throw 할 수 없다.
7.4.2 부모 메소드 호출(super())
메소드 오버라이딩 시 부모 클래스의 메소드를 사용하고 싶으면 아래와 같이 호출할 수 있다.
super 키워드를 붙여서 부모 메소드를 호출 한다.
7.5 final 클래스와 final 메소드
7.5.1 상속할 수 없는 final 클래스
- 부모 클래스에 final을 선언을 하면 자식 클래스에서 상속을 할 수 없다.
public final class 부모클래스{
....
}
public class NewString extends 부모클래스{//상속을 할 수 없음.
}
7.5.2 오버라이딩할 수 없는 final 메소드
메소드를 선언할 때 final을 붙이면 오버라이딩을 할 수 없는 메소드가 된다.
public class Car{
public int speed;
public void speedUp(){
speed +=1;
}
//final선언 메소드
public final void stop(){
System.out.println("차를 멈춤");
speed =0;
}
}
public class SportCar extends Car{
@Override
public void speedUp(){speed +=10}
//오버라이딩을 할 수 없음
@Override
public final void stop(){
System.out.println("차를 멈춤");
speed =0;
}
}
7.6 Protected 접근 제한자
public : 모두 접근
protected : 자식 클래스와 같은 패키지 클래스만 접근가능
default : 다른 패키지에 소속된 클래스
private : 모든 외부 클래스
7.7 타입 변환과 다형성
다형성은 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질
강제 타입 변환 (Casting)
조건 : 자식 타입을 부모 타입으로 자동변환 후, 다시 자식 타입으로 변환 할때만 가능
자식클래스 변수 = (자식클래스) 부모클래스 타입
객체 타입 확인(instance of)
강제 타입 변환은 자식 타입이 부모 타입으로 변환되어 있는 상태에서만 가능하기 때문에 부모 타입의 변수가 부모 객체를 참조할 경우 자식 타입으로 변환할 수 없다.
7.8 추상 클래스
추상클래스 : 실체 클래스들의 공통되는 필드와 메소드를 정의한 클래스
그렇기 때문에 추상 클래스는 실체 클래스의 부모 클래스 역할을 한다.(단독 객체x)
추상 클래스의 용도
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적
- 실체 클래스를 작성할 때 시간을 절약
추상 클래스의 선언
public abstract class 클래스 이름{
//필드명
//메소드명
//생성자
}
'Java' 카테고리의 다른 글
[이것이 자바다] Chpater06. 확인문제 (0) | 2023.03.15 |
---|---|
[이것이 자바다] Chapter10장 예외 처리 (0) | 2023.02.20 |
[이것이 자바다] Chapter9장 중첩 클래스와 중첩 인터페이스 (0) | 2023.02.19 |
[이것이 자바다] Chapter8장 인터페이스 (0) | 2023.02.17 |
[이것이 자바다] Chapter6장 클래스 (0) | 2023.01.30 |