본문 바로가기

JAVA

생성자 super() 활용 | 21/12/16

 

코드 작성
package ex_super;

public class Test1 {

	public static void main(String[] args) {

		// Student 클래스의 인스턴스 생성
		Student s = new Student("홍길동", 20, "901010-1111111", "아이티윌", "20200902");
		s.getInfo();
		System.out.println(s.getInfo());
		
		s.getInfo2();
//		System.out.println(s.getInfo2()); // 오류 발생!
//		String str = s.getInfo2(); // 오류 발생!
		
	}

}

/*
 * Person 클래스 정의
 * - 멤버변수 : 이름(name, 문자열), 나이(age, 정수), 주민번호(jumin, 문자열)
 * - 생성자 : 이름, 나이, 주민번호를 전달받아 초기화
 * - 메서드 : getInfo() 메서드
 *            => 이름, 나이, 주민번호를 문자열 결합 후 리턴
 * 
 * Student 클래스 정의 => Person 클래스 상속
 * - 멤버변수 : 학교명(schoolName, 문자열), 학번(schoolId, 문자열)
 * - 생성자 : 이름, 나이, 주민번호, 학교명, 학번을 전달받아 초기화
 * - 메서드 : getInfo() 메서드 오버라이딩
 *            => 이름, 나이, 주민번호, 학교명, 학번을 문자열로 결합 후 리턴
 *            
 */

class Person {
	
	String name;
	int age;
	String jumin;
	
	public Person() {}
	
	public Person(String name, int age, String jumin) {
		super(); // 슈퍼클래스 Object 의 기본생성자 호출 코드(생략 가능)
		this.name = name;
		this.age = age;
		this.jumin = jumin;
	}
	
	// 이름, 나이, 주민번호를 문자열로 결합 후 리턴하는 getInfo() 메서드
	public String getInfo() {
		return name + ", " + age + ", " + jumin;
		
	}
	
}

class Student extends Person {
	
	String schoolName;
	String schoolId;
	
	// 파라미터 생성자 정의
	public Student(String name, int age, String jumin, String schoolName, String schoolId) {
		// 슈퍼클래스의 파라미터 생성자 호출하여 부모의 멤버변수를 대신 초기화
		super(name, age, jumin);
		// 서브클래스의 멤버변수만 직접 초기화
		this.schoolName = schoolName;
		this.schoolId = schoolId;
	}

	// getInfo() 메서드 오버라이딩
	@Override
	public String getInfo() {
		// 슈퍼클래스의 getInfo() 메서드 호출을 위해서 super 키워드 사용!
		// => 전달받아 자신의 멤버변수(schoolName, schoolId)를 결합하여 리턴
		return super.getInfo() + ", " + schoolName + ", " + schoolId;
		
		// super.멤버변수명 또는 this.멤버변수명 또는 멤버변수명을 사용하여
		// 슈퍼클래스의 멤버변수를 직접 지정도 가능(효율적이지 않음)
//		return name + ", " + age + ", " + jumin + ", " + schoolName + ", " + schoolId;
		
	}
	
	public void getInfo2() {}
	
}

생성자 super()를 활용한 연습!

출력 결과

홍길동, 20, 901010-1111111, 아이티윌, 20200902

 

나의 소감
   하다가 보니 의문이 생겼다
   '서브 클래스 생성자에서 받아온 파라미터값을 그냥 super로 보냈는데 어떻게 슈퍼에서 이게 name 인지 age 인지 알지??'
   라고 생각하다가 자리를 바꾸어 보았는데 예) 서브클래스 생성자에서 파라미터 값을 String jumin 이랑 String schoolName 이     랑 자리를 바꾸어 보니 값이 바뀌는걸 알았다
   아하! 순서대로 적어서 그렇게 인식하는 거구나! 라고 깨달음 
   But! 데이터 타입이 순서대로 맞지 않으면 오류남!

'JAVA' 카테고리의 다른 글

Up Casting & Down Casting | 21/12/20  (0) 2022.01.09
생성자 super() 활용 | 21/12/16  (0) 2022.01.09
생성자 super() | 21/12/16  (0) 2022.01.09
Pass by value & Pass by Reference | 21/12/16  (0) 2022.01.09
레퍼런스 super 활용 | 21/12/13  (0) 2022.01.09