본문 바로가기
java&eclipse 코딩 알고리즘/20231215

Child

by 몽상크리에이터 2023. 12. 15.

package com.tjoeun.inheritance;

 

// 자식(하위, 서브, 파생) 클래스

// 상속이란 부모 클래스에서 정의한 모든 필드와 메소드를 자식 클래스에서 물려받는 것을 말한다.

// 자식 클래스는 별도의 선언 없이 부모 클래스의 모든 기능을 사용할 수 있다.

// public class 자식클래스이름 extends 부모클래스이름

// Child 클래스는 Parent 클래스를 상속받아 만든다.

public class Child extends Parent {

 

// Child 클래스는 Parent 클래스의 private으로 설정된 것을 제외한 모든 필드와 메소드를 사용할 수 있다.

 

// Child 클래스에서 필요한 기능을 정의한다.

private int age;

private String nickname;

 

public Child() {

// super는 부모 클래스를 의미하고 뒤에 ()가 나오면 부모 클래스의 생성자를 의미한다.

// ()안에 아무것도 없으면 부모 클래스의 생성자 중에서 기본 생성자를 의미한다.

// this는 현재 클래스를 의미하고 뒤에 ()가 나오면 현재 클래스의 생성자를 의미한다.

// super()는 직접 코딩하지 않아도 자바 컴파일러가 자동으로 만들어준다.

// super()나 this()는 반드시 생성자의 첫 문장으로 써야한다. => 가장 먼저 실행된다.

// 부모 클래스의 생성자가 자식 클래스의 생성자보다 먼저 실행된다.

// 부모 클래스에서 기본 생성자를 정의하지 않으면 자식 클래스에서 super()을 실행하려 할 때

// 부모 클래스에 실행할 기본 생성자가 없기 때문에 에러가 발생된다.

// 결론 => 모든 클래스에 기본 생성자는 꼭 만들자

super(); // 생략해도 결과 동일

System.out.println("자식 클래스의 기본 생성자 실행");

}

 

// 부모 클래스에서 상속받은 name, gender와 자식 클래스에서 정의한 age, nickname을 인수로 넘겨받는

// 생성자를 만들어 초기화 시킨다.

// 이클립스가 지원하는 생성자 자동 완성 기능은 현재 클래스에 물리적으로 정의하지 않은 필드

// 즉, 상속받은 필드는 생성자를 만드는 대화 상자에 표시되지 않는다.

//1번 방법 : 부모 클래스의 생성자를 호출: 가장 많이 사용

public Child(String name, boolean gender, int age, String nickname) {

// 부모 클래스에서 상속받은 필드의 접근 권한이 private일 경우 자식 클래스에서 직접 접근할 수 없기 때문에

// 부모 클래스의 생성자를 호출해서 초기화시킨다.

// this.name = name; 에러 부모 클래스의 private 권한으로 설정된 필드는 자식에서도 접근 불가능하다

// this.gender = gender; 에러 에러 부모 클래스의 private 권한으로 설정된 필드는 자식에서도 접근 불가능하다

super(name, gender); // 부모 클래스의 Parent(String name, boolean gender)가 실행된다.

this.age = age;

this.nickname = nickname;

}

 

 

/*//2번 방법 : setter이용

public Child(String name, boolean gender, int age, String nickname) {

// 부모 클래스에서 상속받은 접근 권한이 private인 필드의 setter 메소드가 정의되어 있다면

// 상속 받은 setter 메소드로 부모 클래스에서 상속받은 필드를 초기화 시킬 수 있다.

setName(name);

setGender(gender);

this.age = age;

this.nickname = nickname;

}

*/

 

/*

// 3번 방법 : 부모 클래스의 필드 접근 권한을 protected로 설정 후 자식 클래스에서

// this를 사용해 초기화가 가능.

public Child(String name, boolean gender, int age, String nickname) {

this.name = name;

this.gender = gender;

this.age = age;

this.nickname = nickname;

}

*/

 

public int getAge() {

return age;

}

 

public void setAge(int age) {

this.age = age;

}

 

public String getNickname() {

return nickname;

}

 

public void setNickname(String nickname) {

this.nickname = nickname;

}

 

// 임꺽정(남) - 35, 도적넘 <<< 으로 출력하기

 

// @Override(재정의) : 부모 클래스에서 상속받은 메소드의 기능을 무시하고 다시 만들어 사용한다.

// Overrode : 같은 이름의 메소드를 여러개 생성 가능하다. // 구별방법 1. 인수의 개수, 2. 개수가 같으면 인수의 타입

@Override

public String toString() {

// 부모 클래스에서 상속받은 private 권한을 가지는 필드는 자식 클래스에서 접근할 수 없으므로

// getter 메소드를 사용해서 접근한다.

return getName() + "(" + (isGender() ? "남":"여") + ") - " + age + ", " + nickname;

 

// 부모 클래스에서 상속받은 메소드의 앞, 뒤에 자식클 래스에서 기능을 추가할 수 있다.

// 부모 클래스에서 상속받은 메소드를 실행하려면 부모 클래스를 의미하는 super 뒤에 "."을 입력하고

// 실행할 메소드를 호출하면 된다.

// super.toString(): 부모 클래스의 toString() 메소드를 실행한다. // 앞뒤에만 사용가능. 중간에 사용불가.

// return super.toString() + " - " + age + ", " + nickname;

 

// 부모 클래스에서 상속받은 필드의 접근 권한이 protected일 경우 자식 클래스에서 접근이 가능하므로

// getter 메소드를 사용하지 않아도 된다.

// return name + "(" + (gender ? "남":"여") + ") - " + age + ", " + nickname;

}

 

 

 

 

}

'java&eclipse 코딩 알고리즘 > 20231215' 카테고리의 다른 글

VIPCustomer  (0) 2023.12.15
Customer  (0) 2023.12.15
ClassIncludeTest  (0) 2023.12.15
Parent  (0) 2023.12.15
InheritanceTest  (0) 2023.12.15