728x90
본 내용은 인프런의 즐거운 자바 를 보고 정리했습니다.
생성자
- 생성자가 있으면 기본 생성자(매개변수가 없는 생성자)는 생성 되지 않는다!!
- 인스턴스를 사용할 때 생성자를 사용한다.
- ex) Car taxi = new Car();
- 즉, 우리가 특정 클래스를 new 생성자를 사용한다.
- 어떤 값을 가지고 인스턴스가 만들어지게 하고 싶다면 생성자를 사용한다.
- 클래스 작성시 생서자를 만들지 않았다면 자동으로 기본 생성자를 생성한다.
예시 코드
코드로 쉽게 이해 해보자!
생성자를 private 접근 제한자로 설정하면 해당 클래스는 인스턴스를 생성할 수 없다.!
예제 01.
package org.example;
public class Car {
private String name;
// 생성자
// return type이 없다. 클래스와 이름이 같아야 한다.
// 매개변수가 없는 생성자를 기본 생성자라고 한다.
public Car () {
System.out.println("자동차가 한 대 생성됩니다.");
}
public Car(String name) {
this.name = name;
}
// 인스턴스 메서드
public void printName() {
System.out.println("자동차 이름 : " + name);
}
}
package org.example;
public class CarExample01 extends Car {
public static void main(String[] args) {
Car car01 = new Car();
car01.printName();
System.out.println("-----------------------");
Car car02 = new Car("myCar");
car02.printName();
}
}
예제 02.
생성자 오버로딩
- 생성자는 매개변수의 개수가 다르거나, 타입이 다르면 여러 개를 가질 수 있다.
자신의 생성자 호출 this()
- this는 인스턴스 자기 자신을 참조할 때 사용하는 키워드
- this() 생성자는 자기 자신의 생성자를 말한다.
- this()는 생성자 안에서만 생성이 가능하다.
package org.example;
public class User {
// private 접근 제어자로 다른 클래스에서 접근할 수 없다.
private String email;
private String password;
private String name;
// 생성자를 하나라도 만들게 되면 기본 생성자가 자동으로 안 만들어진다.
public User(String name, String email) {
this(name, email, null);
}
// 생성자 오버로딩
public User(String name, String email, String password) {
this.name = name;
this.email = email;
this.password = password;
}
// 필드의 인스턴스 변수를 호출하기 위해서 getter, setter를 만들어줘야한다.
public String getEmail() {
return email;
}
public String getName() {
return name;
}
public String getPassword() {
return password;
}
@Override
public String toString() {
return "User{" +
"email='" + email + '\'' +
", name='" + name + '\'' +
'}';
}
}
package org.example;
public class UserExam {
public static void main(String[] args) {
User user = new User("이미자", "Lee@example.com");
System.out.println(user.getName());
System.out.println(user.getEmail());
System.out.println("----------------");
User user1 = new User("홍길동", "hong@example.com", "passwordTest");
System.out.println(user1.getName());
System.out.println(user1.getEmail());
System.out.println(user1.getPassword());
System.out.println("---------------");
System.out.println(user);
System.out.println(user1);
}
}
예제 03
부모의 생서자를 호출하는 supser()
- super() 생성자는 부모 생성자를 의미한다.
- super() 생성자는 생성자 안에서만 사용가능한다.
- 생성자는 무조건 super() 생성자를 호출해야하는데 작성하지 않았다면 자동으로 부모의 기본 생성자를 호출한다.
- 만약 부모 클래스가 기본 생성자를 가지고 있지 않다면, 반드시 직접 super() 생성자를 호출해야한다.
- 또는 super("test")한에 인자를 작성해줘야한다.
package org.example;
public class Car01 extends Car {
public Car01() {
super(); // 부모의 "기본 생성자"를 호출하는 코드가 자동으로 삽입된다.
// 만약 부모의 기본 생성자가 없는 경우
// 자식의 생성자에서 super를 직접 호출해야한다.
// super 안에 전달인자를 작성해줘야 한다.
super("test");
System.out.println("자동차가 한 대 생성됩니다.");
}
}
참고 사이트
'프로그래밍 > Java' 카테고리의 다른 글
[프로그래밍] Thread with Java (0) | 2023.09.09 |
---|---|
[자바 문법] Map 인터페이스 (0) | 2023.08.10 |
[자바 문법] String 클래스 (0) | 2023.08.04 |
[자바 문법] Java Collection Framework(JCF) (0) | 2023.07.20 |
[자바 문법] Character 클래스 (0) | 2023.05.01 |