일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 자바 Wrapper클래스
- java super( )
- 자바 문자열 클래스
- Java 추상 메서드
- Express
- Java 내부 클래스
- 코딩
- 자바 Random클래스
- DBMS
- Java추상클래스
- 자바 try-catch
- Java객체배열
- Java업캐스팅
- 데이터베이스
- oracle
- db
- 자바 String클래스
- 자바 제어문
- database
- dbeaver
- Java try-catch
- Java다운캐스팅
- 자바 예제
- Java thorw
- 자바 추상메서드
- 오라클
- nodejs
- Java문자열 클래스
- 자바 스트링클래스
- 자바 내부 클래스
- Today
- Total
코딩이란 무엇일까
Java/자바[12일차](1)-상속 본문
상속 이란?
상속이란 단어에서 알 수 있듯이
부모가 자식에게 재산을 물려주는 것과 비슷하다.
이러한 상속은 클래스에서도 일어납니다.
프로그램에서의 상속은 부모의 필드, 메서드, 생성자를 자식 클래스가 선택하여 상속받아 올 수 있습니다.
클래스의 상속 방법
현실 세계에서는 부모가 자식을 선택하여 상속을 하지만
프로그램에서는 자식이 부모를 선택합니다.
클래스의 상속을 하기 위해서는 extends라는 키워드가 필요합니다.
class 자식클래스 extends 부모클래스{
}
상속의 특징
- 여러 개의 부모 클래스를 상속할 수 없습니다. 즉, 다중 상속은 자바에서 불가능합니다. 따라서 extends뒤에 부모 클래스가 오는 자리에는 하나의 클래스만이 올 수 있습니다.
- 부모 클래스에서 private접근 제한을 갖는 필드와 메서드는 상속 대상에서 제외됩니다. 추가적으로 부모와 자식 클래스가 다른 패키지에 존재한다면 default 접근 제한을 갖는 필드와 메서드 또한 상속 대상에서 제외됩니다.
상속 사용해보기
부모 클래스
public class Parents {
int age;
String name;
private int password;
public void print() {
System.out.println("저는 부모입니다.");
}
}
자식 클래스
public class Children extends Parents {
}
메인 메서드
public static void main(String[] args) {
Children c= new Children();
c.name="자식"; //필드 사용 가능
c.age=15;
//c.password; private변수이기 때문에 오류
System.out.println(c.name);
System.out.println(c.age);
c.print();
}
위의 예시처럼 분명 자식 클래스 내부에는 아무것도 없지만
자식의 객체를 생성하면 자식은 부모의 클래스를 상속 받았기 때문에
부모의 필드와 메서드를 사용할 수 있습니다.
부모 생성자 호출
현실 세계에서도 부모 없는 자식이 하늘에서 떨어질 수 없듯이
자바에서 또한 객체를 생성하면 부모 객체가 먼저 생성되고 그다음에 자식 객체가 생성됩니다.
위의 Children의 객체도 Parents객체가 생성된 뒤 Children객체가 생성된 것입니다.
부모 생성자는 선언하지 않았는데 어떻게 자식 객체를 만들 때 생성될까?
위 코드를 보면 분명 Children클래스 안에 부모 생성자를 선언하지 않았습니다.
그런데 어떻게 Children 객체를 생성할 때 Parents객체도 생성된 것일까요?
그 이유는 컴파일러가 자동적으로 부모 클래스의 기본 생성자를 추가해 주기 때문입니다.
public Children( ){
super( );
}
super( )은 부모 클래스이 기본 생성자를 뜻합니다.
개발자가 명시적으로 기본 생성자를 만들어 주지 않아도 컴파일러가 위와 같은 부모의 생성자를 만들어주는 것이죠.
추가적으로 명시적으로 부모 생성자를 호출하고 싶다면 아래와 같이 작성하면 됩니다.
자식클래스(매개변수선언){
super(매개 값);
}
- 매가 값의 타입과 일치하는 부모 생성자를 호출합니다. 만약 매개 값의 타입과 일치하는 부모 생성자가 없을 경우 컴파일러 에러가 발생합니다.
- super(매개 값)이 생략되면 컴파일러에 의해 super( )가 자동적으로 추가되기 때문에 부모의 기본 생성자가 존재해야 합니다.
- 부모 클래스에 기본 생성자가 없고 매개변수가 있는 생성자만 있다면 자식 생성자 내부에 부모 생성자의 호출을 위해서 반드시 super(매개 값)을 명시적으로 호출해주어야 합니다.
- 부모의 매개변수가 있는 생성자는 반드시 첫 줄에 위치해야 하며 그렇지 않을경우 컴파일 에러가 발생합니다.
protected 접근 제한자
protected접근 제한자는 같은 패키지 내에서
default와 같이 접근 제한이 없지만
다른 패키지에서는 자식 클래스만 접근을 허용합니다.
protected 사용해보기
패키지가 다른 부모 클래스
package A11_04;
public class Parents {
protected int age=15;
protected String name;
protected int password;
protected void print() {
System.out.println("저는 부모의 메서드입니다.");
}
}
패키지가 다른 클래스
package testPackage;
public class B {
void print() {
//age=15;
//name="B" 오류:paretns를 상속받지 않았기 때문에 사용 오류
}
}
패키지가 다른 자식 클래스
import A11_04.Parents;
public class A extends Parents {
public void print() {
age=15; //다른 패키지이지만 상속 받았기 때문에 필드 사용 가능
name="자식";
password=1234;
}
}
위와 같이 패키지가 다르지만
protected가 붙어있는 필드와 메서드들은 자식 클래스만 사용 가능한 것을 볼 수 있습니다.
이상 글 마치겠습니다.
글 읽어주셔서 감사합니다.
'국비지원수업' 카테고리의 다른 글
Java/자바 [프로그래머스 문제] (Lv.0 7의 개수), (Lv1.부족한 금액 계산하기) , (Lv1.없는 숫자 더하기) (0) | 2022.11.06 |
---|---|
Java/자바[12일차](2)-다형성(PolymoPhism) (0) | 2022.11.05 |
java/자바[11일차]-(2)for-each문 (0) | 2022.11.03 |
java/자바[11일차](1)객체 배열,메소드 오버로딩 (0) | 2022.11.03 |
Java/자바[10일차](3)-생성자 (0) | 2022.11.02 |