반응형
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
반응형
'[Java] > [Java]' 카테고리의 다른 글
[Java] 자바 인터페이스(Interface) (default , 고정상수) (0) | 2021.07.02 |
---|---|
[Java] 자바 Class(클래스) 상속(extends) 오버라이드(@Override) (0) | 2021.07.02 |
[Java] 자바 Class(클래스) 상속(extends)[추상화] (0) | 2021.07.02 |
[Java] 자바 Class(클래스) 클래스 특징 (Setter Getter, 캡슐화, 은닉, public vs private) (0) | 2021.07.02 |
[Java] 자바 Class(클래스)에 함수(Function) 만들기 (0) | 2021.07.02 |