반응형

 

package Inheritance_super;

public class People {
	public String name = "장첸";
	public String ssn;
	
	public People(){
		this.name ="없음";
		this.ssn = "000";
	}
	
	public People(String name, String ssn) {
	this.name = name;
	this.ssn = ssn;
	}
}
package Inheritance_super;

public class Student extends People{
	public int studentNo = 1;
	
	public Student(String real_name, String ssn, int studentNo) {
//		this.name = name; 불가능
//		this.ssn = ssn; 불가능
//		
		super(real_name, ssn);
		// People의 메소드 People(String name , String ssn)을 호출
		this.studentNo = studentNo;
	}

	public Student() {
		this("X","X",0);
	}
	
	public void test() {
		System.out.println("부모 name : " + super.name);
		System.out.println("자식 name : " + this.name);
		
		super.name = "김철수";
		System.out.println("자식 name " + this.name);
		System.out.println("부모 name " + super.name);
		// super.name = People의 name에 접근
	}
}
package Inheritance_super;

public class Teacher extends People{
	String name ="Teacher";
	
	void childMethod() {
		System.out.println("this.x(Teacher)" + this.name);
		System.out.println("super.x(People)" + super.name);
	}
}
package Inheritance_super;

public class StudentExample {

	public static void main(String[] args) {
		Student student = new Student("홍길동" , "123456-1234567",1);
		Student student2 = new Student();
		Teacher teacher = new Teacher();
		
		System.out.println("name : "+ student.name);
		System.out.println("ssn : " + student.ssn);		
		System.out.println("studentNo : " + student.studentNo);
		
		
		
		System.out.println();
		
		student.test(); 
		System.out.println();
		
		student2.test();
		System.out.println();
		
		teacher.childMethod();

	}

}

super()은 부모의 생성자를 의미합니다. super()만 적을시에 부모 기본적인 생성자를 의미하고

super(매개변수, 매개변수...) 이러한 형태의 생성자가 있을 시에 매개변수를 받을 수 있는 구조라면

public Student(String real_name, String ssn, int studentNo){....}

매개변수를 받는 생성자를 불러와서 적용시킵니다.

자식이 생성자를 만들 때 super()를 쓰면 부모의 Default내용이 들어가게 됩니다.

나머지 추가 속성이 자식한테 있으면 그 부분만 설정해주면됩니다.

super를 안 쓰고 this.studentNo = stduentNo만 쓸시 부모에 "장첸"이라고 적힌 게 Default로 들어가게 됩니다.

여기에선 매개변수를 안 받는 생성자가 있기 때문에 그 생성자가 Default값이 되어서 

name = "없음"이 들어가게 되는 것입니다.

 


this()은 자신 클래스의 또다른 생성자를 의미합니다.


super.name으로 부모의 name에 접근할 수 있습니다. 기본적인 생성자(매개변수 없는)가 없는 경우에는

super.name 에 없음이 아니라 장첸이 나옵니다.

 

 

https://github.com/SungJLee/My_Java_World.git

 

 

SungJLee/My_Java_World

Contribute to SungJLee/My_Java_World development by creating an account on GitHub.

github.com

 

반응형